-
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
-
分类:
1.主键约束:primary key //primary:初始的 prim 第一 + ary …的 → 最初的;根本的
2.非空约束:not null
3.唯一约束:unique
4.外键约束:foreign key
-
非空约束:not null
1.在创建表时添加约束:
CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL );
2.使用表时添加非空约束:
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
-
唯一约束:unique ,被修复的那一列的值不能重复
1.在创建表时添加约束:
CREATE TABLE stu( id INT UNIQUE , NAME VARCHAR(20) NOT NULL );
2.使用表时添加非空约束:
ALTER TABLE stu MODIFY id INT UNIQUE;
3.删除唯一约束:
ALTER TABLE stu DROP INDEX id;
-
主键约束:primary key 第一 + ary …的 → 最初的;根本的
1.注意:
1.1 含义:非空且唯一
1.2 一张表只能有一个字段为主键
1.3主键就是表中记录的唯一标识
2.在创建表时,添加主键约束
CREATE TABLE stu ( id INT PRIMARY KEY, NAME VARCHAR(20) );
3.删除主键约束
ALTER TABLE stu DROP PRIMARY KEY;
4.使用表时添加主键约束
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
5.自动增长
5.1 概念:如果时数值类型的,使用auto_increment 可以来完成值的自动增长 in 使…;加以…;饰以… + cre 增长 + ment 表结果 → 增值;增加
5.2 在创建表时,添加主键约束,并且完整主键的自增长
CREATE TABLE stu (
id INT PRIMARY KEY auto_increment,
NAME VARCHAR(20)
);
5.3 删除自动增长
ALTER TABLE stu MODIFY id INT ; 这种写法删不掉主键约束,所以只删掉了自动增长
-
外键约束 foreign key
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eoi3o6x0-1592296853223)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200616113410415.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tmOUXCba-1592296853232)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200616113428743.png)]
1.在创建表时添加外键 让表与表产生关系,从而保证数据的正确性。
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30),
age INT,
dep_id INT ,
CONSTRAINT emp_dep_id FOREIGN KEY (dep_id) REFERENCES department(id)
);
references 关联
2.删除外键
ALTER TABLE employee DROP FOREIGN KEY emp_dep_id;
3.使用时添加外键约束
ALTER TABLE employee ADD CONSTRAINT emp_dep_id FOREIGN KEY (dep_id) REFERENCES department(id);
- 级联更新
ALTER TABLE employee ADD CONSTRAINT emp_dep_id FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE;
- 级联删除
ALTER TABLE employee ADD CONSTRAINT emp_dep_id FOREIGN KEY
(dep_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE CASCADE;
数据库的设计
-
多表之间的关系
分类:
一对一的关系:人和身份证,一个人只有一个身份证,一个身份证只有一个人,这就是一对一的关系。
一对多的关系: 部门和员工,一个部门有多个员工,一个员工只能对应一个部分
多对多的关系:一个学生可以选很多学科,一个学科也可以被多个学生选择。
实现关系:
一对多:部门和员工,在多的一方建立外键,指向一的一个放的主键。
多对多:学生和课程, 设置一个中间表,列内容为两个表的主键。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Upb0Sp8n-1592296853241)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200616135634676.png)]
一对一:两个表,在任意一个表添加唯一约束的外键,指向另一个表的主键即可
-
数据库设计的范式
设计数据库时需要遵循的规范
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
分类:
-
第一范式(1NF)数据库表的每一列都是不可分割的原子数据项
-
第二范式(2NF)在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码 的部分函数依赖)
函数依赖:通过A确定B,如果通过A属性或者属性组的值,可以确定唯一B属性的值。则成B依赖A,例如通过学号确定学生的姓名。(学号和课程名称)可以确定分数,()里的内容则为属性组。
完全函数依赖:通过A确定B,如果A时一个属性组,则B属性值的确定需要依赖A所有的属性值。
部分函数依赖:(学号,课程名称)可以确定b姓名 , 学号自己就可以确定姓名成为部分函数依赖。
传递函数依赖 :通过A确定B,通过B确定C,如果通过A属性确定B属性的值,再通过B属性的值可以确定唯一C的值,则称C传递函数依赖于A。 学号确定系名,系名确定系主任,那么系主任传递依赖于学号。
码:如果一个属性属性组在一张表中,这个属性被其他所有属性完全依赖,则称这个属性为该表的码。
(学号,课程名称)确定了其他所有属性。
主属性:码属性组中的所有属性
非主属性:除了码属性组的属性的其他属性
解决冗余的问题
-
第三范式(3NF)在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
解决添加和删除的问题
-
-
数据库的备份和还原
-
命令行方式: 备份 mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原: 登陆数据库,创建数据库,使用数据库, source 数据库路径
-
图形化工具方式:(简单)