4.MySql入门-MySql用户权限、三大范式
4.1创建新用户
先使用root用户登录
create user newUser identified by '123456';//创建一个没有任何权限的用户
其中密码123456会用md5加密
如果需要修改密码,可以使用如下语句
UPDATE USER SET PASSWORD=PASSWORD('123') WHERE USER='newUser';
注意:修改密码、创建用户或者修改权限操作后,要执行flush privileges
刷新权限相关表,或者手动重启MYSQL服务,否则拒绝访问。
4.2给新创建的用户分配权限
//*.*的位置放入的是对哪个裤,哪个表进行权限分配,*.*表示对于所有库,所有表。
GRANT all privileges ON *.* TO 'newUser'@'localhost' IDENTIFIED BY '123456';//分配所有权限,可以在本地访问mysql
grant all privileges on *.* to testuser@"%" identified by "123456" ;
//分配所有权限,可以远程访问mysql
GRANT SELECT ON *.* TO 'newUser'@'localhost' IDENTIFIED BY '123456';
//分配查看权限,可以本地访问mysql
GRANT DELETE ON *.* TO 'newUser'@'localhost' IDENTIFIED BY '123456';
//分配删除权限,可以本地访问mysql
GRANT INSERT ON *.* TO 'newUser'@'localhost' IDENTIFIED BY '123456';
//分配插入权限,可以本地访问mysql
GRANT UPDATE ON *.* TO 'newUser'@'localhost' IDENTIFIED BY '123456';
//分配修改权限,可以本地访问mysql
4.3回收权限
revoke select on *.* from newUser;
//回收查看权限
//回收其他权限可以参考上部分
4.4三大范式
4.4.1第一范式(1NF)无重复的列:
也就是要求表内每个字段都是独立并且不可以再分割的单元。
如定义一个学生表:grade(成绩下)的数据内容为77/88/66
显示是不符合第一范式的。
正确的定义方法是:将grade分割成 english math chinese
4.4.2第二范式(2NF)属性完全依赖于主键 [ 消除部分子函数依赖 ]
在满足第一范式的基础上,要求表的除主键以外的字段都和主键有依赖关系的。
如员工表:员工编号 员工姓名 员工所属部门 员工部门主要工作 订单名称 订单奖金 -显然不符合第二范式
例如,当一个新订单到来的时候,没有员工空闲去接受订单,那么我们便没有表可以存放数据。
或者是当员工更新订单的时候,那么旧订单会面临丢失的困境,或者是我们需要修改订单名称的时候,只能一个个员工去更新,显然是不合理的。
正确的处理方法:
员工表:员工编号 员工姓名 所属部门名称 部门主要工作
订单表:订单编号 订单名称
订单关系:员工编号 订单编号 订单奖金
4.4.3第三范式(3NF)属性不依赖于其它非主属性 [ 消除传递依赖 ]
在满足第二范式的条件下,表的除主键外的字段都只能和主键有直接决定的依赖关系。
员工表:员工编号 员工姓名 所属部门名称 部门主要工作
订单表:订单编号 订单名称
订单关系:员工编号 订单编号 订单奖金
员工表满足2NF,但是却不满足3NF。
因为员工表中存在传递函数依赖,会产生数据冗余,从来带来一系列的问题。
更正方法:
员工表:员工编号 员工姓名 部门编号
订单表:订单编号 订单名称
订单关系:员工编号 订单编号 订单奖金
部门表: 部门编号 部门名称 部门主要工作