Mysql

windows服务

初始化

mysqld --initialize-insecure

安装/移除MySQL的windows服务

mysqld --install    #安装windows服务
mysqld --remove  #移除windows服务

启动/停止windows服务

net start mysql    #启动windows服务
net stop mysql    #停止windows服务

破解密码

跳过授权表来开启服务器

mysqld --skip-grant-tables

统一字符串编码

配置my.ini文件

[mysqld]
# 设置mysql的安装目录 **后面的路径一定是安装sql的目录(自己电脑的)**
basedir=C:\mysql-5.7.22-winx64\mysql-5.7.22-winx64
# 设置mysql数据库的数据的存放目录,必须是data
datadir=C:\mysql-5.7.22-winx64\mysql-5.7.22-winx64\data        
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # mysql端口 port=3306 # 字符集 [mysqld] character-set-server=utf8 collation-server=utf8_general_ci [client] default-character-set=utf8 [mysql] default-character-set=utf8 #设置完后使用/s;查看配置结果

注;若是配置完后,mysql的windows服务无法启动的话,解决方法是将配置信息中的两个路径中的"\"换成"/"

管理员登录

mysql -uroot -p

创建用户

create user 'xxx'@'ip地址' indentified by '密码' #可用%代替全部

授权

grant 权限
grant all priviliges on *.* to 'xxx'@'%';    #授予全部权限
revoke all priviliges on *.* from 'xxx'@'%';  #移除

sql命令

选择用户
select user();
查看所有的数据库
show databases;
创建数据库
create database 名字;
创建表
create table 名字(id int,name char(10));
为表添加数据
insert into 表名 (id name) values(1 aaa),(2 bbb);

sql的基本语法

查看所有的表
show tables;
查看表的详细结构
desc 表名;
查看表的内容
select * from 表名;
select id,name from 表名;
select * from 表名 where id=1;
关系型数据库:mysql db2 oricle sqlite  表中存储                
非关系型数据库:monogodb redis
    key : value  基于model 模型  obj.insert    

复制表的结构和数据

create table 表名 select * from 库名.表名;

只复制表结构

create table 表名 select * from 库名.表名 where 1>2;
create table 表名 like 库名.表名;

储存引擎

mysql 5.5版本之后默认为innodb存储引擎
另外还有mysiam、memory、blackhone
#memory,在重启mysql或者重启机器后,表内数据清空
#blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录

数据类型

数字

整型
thinyint int bigint
小数
float 在位数比较短的情况下不精准
double  在位数比较长的情况下不精准
decimal  推荐使用 精准内部原理是以字符串的形式去存

字符串

char(10):浪费空间,存储速度快
varchar:精准,节省空间,存储速度慢
sql优化:创建表时,定长的类型往前放,变长的往后放
            比如性别           比如地址或描述信息       
>255个字符,超了就把文件路径存放到数据库中。
        比如图片,视频等找一个文件服务器,数据库中只存路径或url。 

时间类型

语法:
        YEAR
            YYYY(1901/2155)

        DATE
            YYYY-MM-DD(1000-01-01/9999-12-31)

        TIME
            HH:MM:SS('-838:59:59'/'838:59:59'DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

        TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

now() sql的内置函数,根据数据类型生成对应的时间格式

枚举类型与集合类型

enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female

set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

create table consumer(
    -> id int,
    -> name varchar(50),
    -> sex enum('male','female','other'),
    -> level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
    -> fav set('play','music','read','study') #在指定范围内,多选多
    -> );

整型

默认是signed 有符号的 范围 -128~127
    sql中没有boolean类型 使用tinyint(1)来表示boolean值 1 表示true 0 表示false
-- int 类型后面的存储是显示宽度而不是存储宽度,其它的数据类型都是存储宽度
    所以我们来设计表的时候 int类型的字段不用加显示宽度,默认是总长度的位数+1

函数

now() 根据字段的数据类型获取当前的时间格式
char_length: 获取字符长度
length():获取字节数
                           
sql中默认是有符号的
    如果设置无符号unsigned
    用0填充 zefofill

约束

 not null 与 default

create table tb1(id int not null default 2,name char(20) not null);
not null #设置不能为空
default #设置默认值

unique

单列唯一

create table dep(id int not null,name varchar(20) unique);
# name不能重复

多列唯一 表示每一列都唯一

create table dep2(id int unique,name varchar(20) unique);
# id与name都不能重复

组合唯一 (联合唯一) 只要有一列不同,就可以插入数据

create table dep3(
            d int,
            name varchar(20),
            unique(id,name)        
            );

primary key (索引优化查询)

sql版本中,一张表中只允许有一个主键,通常都是id,cid,nid,sid

AUTO_INCREMENT    #标识该字段的值自动增长(整数类型,而且为主键)
主键 primary key

 primary key (索引优化)

  key 查询优化

一个表中可以:

单列做主键
多列做主键(复合主键)

约束:等价于 not null unique,字段的值不为空且唯一

存储引擎默认是(innodb):对于innodb存储引擎来说,一张表必须有一个主键。

 单表查询

where    指定条件
group by    分组
having    过滤(having后面的字段只能是分组之后的字段)
distinct    去重
order by     排序(asc升序/desc降序)
limit    限制显示条数(第一个参数为开始位置,第二个参数为显示数量)

关键字的执行优先级

from
where
group by
having
select
distinct
order by
limit

聚合函数

count(1) 计算总个数
avg()
sum()
max()
min()

多表查询

连接匹配的行
    inner join
优先显示左记录表
    left join
优先显示右记录表
    right join
全外连接
     select * from employee left join department on employee.dep_id = department.id
    union
    select * from employee right join department on employee.dep_id = department.id

 

 

posted @ 2018-10-15 16:23  YaoSir66  阅读(143)  评论(0编辑  收藏  举报