作者:ciaos | 来源:互联网 | 2023-10-12 20:16
1.存储引擎
create table test(
id int auto_increment primary key,
name varchar not null default ''
)engine=Innodb charset=utf8;
1.1 存储引擎的分类
对不同的数据有不同的管理方式和存储方式,在mysql中称之为存储引擎
1). 文章,新闻等安全性要求不高的,选myisam
2). 订单,资金,账单,火车票等对安全性要求高的,选用innodb
3). 对于临时中转表,可以用memory型 ,速度最快
4). 中文全文索引:sphinx
Innodb:
1. 默认版本包含5.5
2. 支持事务
3.不支持全文索引
4. 索引和数据都是在同一个文件中, ( .ibd )
表的结构是在( .frm )文件中
MyIsam
1. 默认版本5.5以下
2. 不支持事务
3. 支持全文索引
4. .frm:表结构
.MYD:表数据
.MYI: 表索引
2. 索引
2.1 作用:加快查询速度
2.2 类比:
新华字典的目录,可以将索引理解成一个特殊的文件。
如果没有这个文件的话,查询的是按照从前往后查找数据,
如果有这个文件的话,会按照一种特殊的数据结构(二叉树)查找数据
2.3 分类与创建和删除
1. 主键索引:加快查询 + 不能重复 + 不能为空 primary key
第一种:
create table t1(
id int auto_increment primary key,
name varchar(32) not null default ''
)engine=Innodb charset=utf8;
第二种
alter table t1 change id id int auto_increment primary key;
2. 唯一索引:加快查询 + 不能重复 unique(列名)
联合唯一索引: 加快查询 + 不能重复 unique (列名1, 列名2)
第一种:
create table t1(
id int auto_increment primary key,
name varchar(32) not null default '',
age varchar(32) not null default '',
unique ix_name (name,age)
)engine=Innodb charset=utf8;
第二种:
create unique index 索引名称 on 表名(列名);
create unique index ix_name on t1(name);
联合索引:
create unique index 索引名称 on 表名(列名1,列名2);
create unique index ix_name_age on t1(name,age);
3. 普通索引:加快查询 index('列名')
第一种:
create table t1(
id int auto_increment primary key,
name varchar(32) not null default '',
index ix_name ('name')
)engine=Innodb charset=utf8
第二种:
create index 索引名称 on 表名 (列名);
create index ix_name on t1 (name);
4. 删除
drop 索引名称 on 表名;
drop ix_name on t1;
2.4 使用场景与缺点
场景:使用频繁的列上加一个索引
缺点:
版本5.3以下:
删除和修改的速度就变慢了
版本5.5以上:
删除和修改的速度不是特别的慢
索引的使用
expain 工具
查看sql语句是否用得上索引,或者查看sql执行效率的工具
给执行的SQL语句出一个报告, 通过此报告来判断sql语句的执行效率和效果
SQL语句的规则:
- 不建议使用 like 进行搜索
- 组合索引最左前缀
如果组合索引为:(name,email)
where name and email -- 使用索引
where name -- 使用索引
where email -- 不使用索引
3. 慢日志(slow log)
日志文件: 记录了执行速度特别慢的SQL语句
开启的步骤:
1. show variables like '%query%';
2. set global long_query_time = 1; 设置慢查询的时间
3. set global slow_query_log = ON
4. set global slow_query_log_file = E:\program\mysql-5.6.44-winx64\data\oldboy-slow.log
普通日志记录(general log):
SQL审计 (记录sql的操作语句)
show variables like '%general%';
4. 权限管理
创建用户
create user '用户名'@'IP地址' identified by '密码';
create user 'zekai'@'192.168.1.123' identified by '123qwe';
create user 'zekai'@'192.168.1.%' identified by '123qwe';
create user 'zekai'@'%' identified by '123qwe';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
修改密码
set password for '用户名'@'IP地址' = Password('新密码')
授权:grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权
1. 给db1下的所有文件查看权限:
grant select on db1.* to 'zekai'@'%';
2. 给所有数据库的查看权限:
grant select on *.* to 'zekai'@'%';
3. 给db1下的所有文件查看,插入,删除权限:
grant select, insert, delete on db1.* to 'zekai'@'%';
记住:
flush privileges;