10-DBA命令和数据库设计的三范式
课程目标
掌握新建用户、授权、回收权限、导出导入、第一范式、第二范式、第三范式、三范式总结。
10.1新建用户
create user username identified by 'password';
说明:username——你将创建的用户名, password——该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.
例如:
create user xme361 identified by '123';
10.2 授权
1.命令详解
MySQL> grant all privileges on dbname.tbname to 'username'@'login ip' identified by 'password' with grant option;
- dbname=*表示所有数据库
- tbname=*表示所有表
- login ip=%表示任何ip
- password为空,表示不需要密码即可登录
- with grant option; 表示该用户还可以授权给其他用户
2.细粒度授权
首先以root用户进入MySQL,然后键入命令:
grant select,insert,update,delete on *.* to xme361 @localhost Identified by "123";
如果希望该用户能够在任何机器上登陆MySQL,则将localhost改为 "%" 。
3.粗粒度授权
我们测试用户一般使用该命令授权,
grant all privileges on *.* to 'xme361'@'%' identified by "123";
注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
grant all privileges on *.* to 'hk361'@'%' identified by "123" with grant option;
privileges包括:
- alter:修改数据库的表
- create:创建新的数据库或表
- delete:删除表数据
- drop:删除数据库/表
- index:创建/删除索引
- insert:添加表数据
- select:查询表数据
- update:更新表数据
- all:允许任何操作
- usage:只允许登录
10.3 回收权限
命令详解
revoke privileges on dbname[.tbname] from username@ip;
revoke all privileges on *.* from hk361;
use MySQL
select * from user
进入 MySQL库中
修改密码;
update user set password = password('qwe') where user = 'hk361';
刷新权限;
flush privileges
10.4 导出导入
1. 导出
(1) 导出整个数据库
在Windows的DOS命令窗口中执行:mysqldump heze>d:/hk.sql -u root -p
(2)导出指定库下的指定表
在Windows的DOS命令窗口中执行:mysqldump heze emp>d:/hk.sql -u root -p
2. 导入
登录MySQL数据库管理系统之后执行:source d:/yunke.sql
10.5 第一范式
数据库表中不能出现重复记录,每个字段是原子性的不能再分
不符合第一范式的示例,如下表10-1所示:
表10-1
学生编号 | 学生姓名 | 联系方式 |
1001 | 张三 | [email protected],1359999999 |
1002 | 李四 | [email protected],1369999999 |
1001 | 王五 | [email protected],13488888888 |
存在问题:
最后一条记录和第一条重复(不唯一,没有主键)
联系方式字段可以再分,不是原子性的,如下表10-2所示:
表10-2
学生编号(pk) | 学生姓名 | 联系电话 | |
1001 | 张三 | 1359999999 | |
1002 | 李四 | 1369999999 | |
1003 | 王五 | 13488888888 |
关于第一范式,每一行必须唯一,也就是每个表必须有主键,这是我们数据库设计的最基本要求,主要通常采用数值型或定长字符串表示,关于列不可再分,应该根据具体的情况来决定。如联系方式,为了开发上的便利行可能就采用一个字段了。
10.6 第二范式
第二范式是建立在第一范式基础上的,另外要求所有非主键字段完全依赖主键,不能产生部分依赖,如下表10-3所示:
示例:
表10-3
学生编号 | 学生姓名 | 教师编号 | 教师姓名 |
1001 | 张三 | 001 | 王老师 |
1002 | 李四 | 002 | 赵老师 |
1003 | 王五 | 001 | 王老师 |
1001 | 张三 | 002 | 赵老师 |
确定主键,如下表10-4所示:
表10-4
学生编号(PK) | 教师编号(PK) | 学生姓名 | 教师姓名 |
1001 | 001 | 张三 | 王老师 |
1002 | 002 | 李四 | 赵老师 |
1003 | 001 | 王五 | 王老师 |
1001 | 002 | 张三 |
以上虽然确定了主键,但此表会出现大量的冗余,主要涉及到的冗余字段为“学生姓名”和“教师姓名”,出现冗余的原因在于,学生姓名部分依赖了主键的一个字段学生编号,而没有依赖教师编号,而教师姓名部门依赖了主键的一个字段教师编号,这就是第二范式部分依赖。
解决方案如下:
学生信息表,如下表10-5所示:
表10-5
学生编号(PK) | 学生姓名 |
1001 | 张三 |
1002 | 李四 |
1003 | 王五 |
教师信息表,如下表10-6所示:
表10-6
教师编号(PK) | 教师姓名 |
001 | 王老师 |
002 | 赵老师 |
教师和学生的关系表,如下表10-7所示:
表10-7
学生编号(PK) fk 标签:10,范式,DBA,数据库,学生,编号,主键 From: https://www.cnblogs.com/zxbin/p/17592159.html相关文章
|