Python day 44 :数据库的存储引擎/索引/权限管理
## 存储引擎 ```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;(执行这一步才将授权成功) ```