数据库笔记05 MySQL中DCL语句,范式,索引,引擎
文章目录
一.DCL语句:
DCL指的是数据库管理员DBA在管理数据库用户时用于控制数据库中用户的权限的语句(Data Control Language),其中DCL语句中是针对用户级的SQL语言,言外之意DCL语句的操作对象是数据库中的用户:
- 针对用户来说有:
(1)root:超级管理员,拥有数据库的所有权限
(2)数据库中的其余普通用户 - 查看用户:mysql数据库->user表中存储
使用SQL语句查看所有用户:
select * from mysql.user
- 为了数据库连接的安全起见,数据库中的用户密码不能明文入库,要加密入库:
(1)加密方式:md5:单向加密,不可逆,加密完永远是32位,缺点是所有串加密完加密字符串会固定
(2)查询用户密码:
select authentication_string=PASSWORD;
-- 进行查询5.7版 5.5版使用的是PASSWORD
- root用户给其他用户分配权限及密码:
grant select on 数据库.表 to '用户名' @ 'localhost/*本地查看*/' INDENTIFIED BY '密码';
-- 设置对于数据库中表的权限以及密码
注意: 也就是让用户张三只能看到上面指定数据库的指定表这一张,而且只能查看,不能删除等操作,针对表中的权限除了select外还有增删改的其他操作等等
- 给他所有权限:
grant ALL ON *.* TO '用户' @ 'localhost' INDENTIFIED BY '密码'
- 如果将权限分发的目标用户希望其可以继续向其他用户分发权限则在grant语句最后加上
with grant option
- 收回用户权限使用revoke关键字,从对应的表中收回在前面使用from,即:
revoke 权限 from 数据库.表
二.范式与数据库设计:
数据库设计中需要满足的范式从满足难度由低到高进行排序有:
1NF < 2NF < 3NF < BCNF < 4NF < 5NF...
本篇在这里仅介绍经典三大范式:
- 第一范式(1NF):要求表的每个字段必须是不可分割的独立单元
- 第二范式(2NF):在第一范式的基础上,要求每张表只表达一个意思,表的每个字段都和表的主键有依据
- 第三范式(3NF):在第二范式的基础上,要求每张表的主键之外,的其他字段都只能和主键有直接决定依赖关系
- 简单归纳:
第一范式(1NF):字段不可分
第二范式(2NF):有主键,非主键字段依赖主键
第三范式(3NF):非主键字段不能相互依赖 - 解释:
1NF:原子性:字段不可再分,否则就不是关系数据库
2NF:唯一性: 一个表只说明一个事物
3NF:每列都与主键有直接关系,不存在传递依赖
三.索引:
MySQL中的索引是一种数据结构:当数据向数据中进行存储时,将索引作为 键 用来快速找到对应数据,其中关于索引的知识有:
- 索引的分类:普通索引,唯一索引(unique index此列值不能重复),全文索引(fulltextindex不常用),单列索引,多列索引,空间索引
- 创建索引时选择index或key:
1)创建表时创建索引:在经常需要作为条件的变量后面加上:index(字段名)
2)表已经建好了,后期再去创建,使用create
或alter table
去修改
3)创建之后加索引,两种:
create index 索引名 on 表(被加索引的字段)
alter table 表 add index 索引名(被加索引的字段)
注意: 主键本身就包含索引
- 管理索引:
1)查看索引:show create table 表
可以看表是否拥有索引
2)删除索引:drop index 索引名 on 表
3)查询计划:explain select查询语句
(可以用来查看索引对于效率的提升是否有效) - 索引对于数据查询在数据量很大时会提高效率
- 索引的底层数据结构是Btree
- 查询时有些情况索引会失效的情况:
like查询 or语句前后没有都用索引 等等
四.引擎:
mysql中默认使用引擎是innodb,还有一种是myisam,innodb提供了事务功能(REDO,UNDO,ROLLBACK等等),在旧版本中不支持fulltext index,新版本支持