## 存储引擎
```python
分类:
Innodb:
1,默认版本5.5及以上
2,支持事务
3,不支持全文索引(MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引;)
4,索引和数据都是在同一个文件中: .ibd
表的结构在.frm文件中
MyIsam:
1,默认版本在5.5以下
2,不支持事务
3,支持全文索引
4,表结构:.frm
表数据:.MYD
表索引:.MYI
全文所以插件:sphinx.
```
## 索引
```python
作用: 加快查询的速度
类比: 新华字典的目录, 可以将索引理解成一个特殊的文件, 然后如果没有这个文件的话, 查询是从前到后查找数据的,如果有这个文件的话, 会按照一种特殊的数据结构(二叉树)查找数据
分类:
主键索引: 加快查询 + 不能重复 + 不能为空 primary key
唯一索引: 加快查询 + 不能重复 unique(列名)
联合唯一索引: 加快查询 + 不能重复 unique(列名1,列名2)
普通索引: 加快查询 index('列名')
主键索引创建:
第一种:create table ti(id int auto_increment primary key,name varchar(32) not null default "")engine=Innodb charse=utf8;
第二种:alter table t1 change id id int auto_increment primary key;
唯一索引创建:
第一种:create table t1(id int auto_increment primary key,name varchar(32) not null default "",unique ix_name("name"))engine=Innodb charset=utf8;
第二种:create unique index ix_name on t1(name)
格式:create unique index 索引名称 on 表名 (列名)
普通索引创建:
第一种:create table t1(in int auto_increment key,name varchar(32) not null default "",index ix_name("name"))engine=Innodb charset=utf8;
第二种:create index ix_name on t1(name)
索引的删除操作:
drop index 索引名称 on 表名(列名);
drop index ix_name on t1(name);
"索引的使用场景:使用频繁的列上加一个索引!
索引的使用:
explain 工具
:查看sql语句是否用得上索引,或者查看sql执行效率的工具
给执行的SQL语句一个报告,通过次报告来判断sql语句的执行效率和效果
SQL语句的规则:
1,不建议使用like进行搜索 ...不使用索引
2,组合索引最左前缀:
如果组合索引为:(name,email)
where name and email... 使用索引
where name... 使用索引
where email... 不适用索引
3,函数,比如max/count(name)... 函数都不使用索引
慢日志查询(slow log):
属于日志文件:记录了执行速度特别慢的SQL语句
开启步骤:
1,show variables like "%query%";
2,set global long_query_time=0.5(设置慢查询时间)
3,show_query_log=ON
4,slow_query_log_file=E:\program\mysql-5.6.44-winx64\data\oldboy-slow.log
普通日志:(general log):
SQL审计(记录sql的每一条操作语句)
show variables like "%general%";
见下图:
set global general_log = ON;
```
![general log](general log.png)
## 权限管理
```python
创建用户:
create user "用户名"@"IP地址" identified by "密码";
create user "pengsir"@"192.168.1.%" identified by"123"
create user "pengsir"@"localhost" identified by"111"
create user "pengsir"@"%" identifide by"222"
删除用户:
drop user "用户名"@"IP地址";
修改用户:
rename user "用户名"@"IP地址" to "新用户名"@"IP地址";
修改密码:
set password for "用户名"@"IP地址" =Password("新密码")
授权:
grant 权限 on 数据库.表 to "用户"@"IP地址";
grant select on db1.* to "pengsir"@"%";
grant select on *.* to "pengsir"@"%";
grant select,insert,delete on db1.* to "pengsir"@"%";
最后:flush privileges;(执行这一步才将授权成功)
```