一、DBA常用命令
1、新建用户
CREATE USER username IDENTIFIED BY 'password';
username:新建的用户名
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
create user admin11 identified by '123456';
2、授权
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; 表示该用户还可以授权给其他
3、回收权限
revoke privileges on dbname[.tbname] from username;
revoke all privileges on *.* from admin11;
4、修改数据库密码
update user set password = password('admin123') where user = 'admin11';
flush privileges;
6、导出数据库(使用mysqldump命令)
在windows的dos命令窗口中
mysqldump 数据库名>D:\xx.sql -uroot -p123456
mysqldump 数据库名 表名>D:\xx.sql -uroot -p123456
8、导入数据库
(1)先登录到mysql数据库服务器上
(2)创建数据库:create database 数据库名
(3)使用数据库:use 数据库名
(4)初始化数据库:source D:\xx.sql
二、数据库设计三范式
数据库进行表设计时,需要遵循一定的规则,这种规则就是范式。范式能够帮助我们建立冗余较小、结构合理的数据库
数据库设计范式有3个
第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分(最核心,最重要的范式)
第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖。
第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖。
设计数据库表的时候,按照以上的范式进行,可以避免表中数据的冗余,空间的浪费
1、第一范式
必须有主键,并且每一个字段都是原子性不可再分
如下表
学生编号 学生姓名 联系方式
----------------------------------------------------
1001 张三 zs@gmail.com,13212342345
1002 李四 ls@sina.com,13623456565
1003 王五 ww@163.com,15878909807
不满足第一范式
(1)没有主键;(2)联系方式可以分为邮箱地址和电话
学生编号(PK) 学生姓名 邮箱地址 电话
------------------------------------------------------
1001 张三 zs@gmail.com 13212342345
1002 李四 ls@sina.com 13623456565
1003 王五 ww@163.com 15878909807
2、第二范式
建立在第一范式的基础之上,要求所有非主键字段必须完全依赖主键,不要产生部分依赖
如下表
学生编号 学生姓名 教师编号 教师姓名
------------------------------------------
1001 张三 001 王老师
1002 李四 002 赵老师
1003 王五 001 王老师
1001 张三 002 赵老师
这张表描述了学生和老师的关系:(1个学生可能有多个老师,1个老师有多个学生)
多对多关系!!!
即使修改(学生编号+教师编号)为复合主键,
但依然不满足第二范式,“张三”依赖1001,“王老师”依赖001,显然产生了部分依赖
部分依赖导致数据冗余,空间浪费;“张三”和“王老师”都重复了
因此需要三张表来满足多对多关系
学生表
学生编号(pk) 学生名字
-----------------------
1001 张三
1002 李四
1003 王五
教师表
教师编号(pk) 教师姓名
------------------------
001 王老师
002 赵老师
学生教师关系表
id(pk) 学生编号(fk) 教师编号(fk)
----------------------------------------
1 1001 001
2 1002 002
3 1003 001
4 1001 002
多对多,三张表,其中一个关系表含两个外键
3、第三范式
第三范式建立在第二范式的基础之上,要求所有非主键字典必须直接依赖主键,不要产生传递依赖
如下表
学生编号(PK) 学生姓名 班级编号 班级名称
------------------------------------------
1001 张三 01 一年一班
1002 李四 02 一年二班
1003 王五 03 一年三班
1004 赵六 03 一年三班
这张表描述了学生和班级的关系:(1个班级可能有多个学生)
一对多关系!!!
以上表不满足第三范式
一年一班依赖01,01依赖1001,产生了传递依赖;产生了数据的冗余
班级表:
班级编号(pk) 班级名称
------------------------
01 一年一班
02 一年二班
03 一年三班
学生表:多
学生编号(PK) 学生姓名 班级编号(fk)
---------------------------------
1001 张三 01
1002 李四 02
1003 王五 03
1004 赵六 03
一对多,两张表,其中多的表加外键
一对一关系表(如:在实际的开发中,可能存在一张表字段太多,太庞大;这时要拆分表)
user表
id login_name login_pwd real_name email address........
---------------------------------------------------------------------------
1 zhangsan 123 张三 zs@163.com
2 lisi 123 李四 ls@sina.com
字段太多,需要拆分为两张表
login 登录表
id(pk) login_name login_pwd
------------------------------
1 zhangsan 123
2 lisi 123
user 用户表
id(pk) login_id(fk+unique) real_name email address......
--------------------------------------------------------------------
100 1 张三 zs@163.com
200 2 李四 ls@sina.com
数据库设计三范式是理论上的,实践和理论有的时候有偏差。最终目的是为了满足客户的需求,有的时候会拿冗余换执行速度(在sql当中,表和表之间连接次数越多,效率越低(笛卡尔积))有的时候可能会存在冗余,但是减少了表的连接次数