1.表约束
1.非空约束
数据库字段的某个值是否可以为空,NULL 字段值可以为空,NOT NULL 字段值不能为空。
当字段设置为非空时,插入值就必须要插入值,否则就会报错
2.唯一约束
字段添加唯一约束之后,该字段的值不重复,也就是该字段的值在该表中唯一unique key
添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]]
UNIQUE [INDEX|KEY] [index_name] [index_type]
(index_col_name)
删除唯一约束
ALTERT TABLE tbl_name DROP {INDEX|KEY} index_name
3.主键约束
主键保证记录的唯一性,主键自动为 NOT NULL, 每张数据表只能存在一个主键
添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT[sysbol]]
PRIMARY KEY [index_type] (index_col_name)
删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY
4. 自增约束
AUTO_INCREMENT 自动编号,且必须与主键组合使用,默认情况下,起始值为1,每次的增量为1。
添加自增约束:
ALTER TABLE `user` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT;
删除自增约束:
ALTER TABLE `user` CHANGE `id` `id` INT NOT NULL ;
5.默认约束
DEFAULT(默认约束) 初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值
ALTER TABLE tbl_name ALTER [COLUMN] col_name
{SET DEFAULT literal | DROP DEFAULT}
6.外键约束
字段添加唯一约束之后,该字段的值不重复,也就是该字段的值在该表中唯一unique key
删除父表元素时报错
DELETE FROM `department` WHERE `id`=1;
当存在外键关联时,默认是不允许删除的,这样来保证数据的完整性
7.约束总结
本节所提到的内容都是约束,即对表数据的约束,
除了外键约束,其他的都是对表自身数据的约束,外键约束是对其他表的约束
2.表关系
1.一对多关系
一对多与多对一是一个概念,指的是一个实体的某个数据与另外一个实体的多个数据有关联关系。
学校中一个学院可以有很多的学生,而一个学生只属于某一个学院(通常情况下),学院与学生之间的关系就是一对多的关系,通过外键关联来实现这种关系。
2.一对一关系
一对一关系,指的是一个实体的某个数据与另外一个实体的一个数据有关联关系。
学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当中,会新建一个学生的详细信息表来存放。这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只有一条详细信息
3. 多对多关系
多对多关系,一个实体的数据对应另外一个实体的多个数据,另外实体的数据也同样对应当前实体的多个数据。
学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。对于多对多关系,需要创建第三张关系表,关系表中通过外键加主键的形式实现这种关系。
这里需要注意的是,在多对多关系中,我们常用中间表来表示
3.数据库三范式
1.第一范式-1NF
第一范式(1NF):符合1NF的关系中的每个属性都不可再分。1NF是所有关系型数据库的最基本要求
简单来说,就是不能出现多个表头
2.第二范式-2NF
第二范式(2NF):2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖
简单来说,只能描述一个对象(主键),其它列名(副键)与对象之间相互完全依赖
3.第三范式-3NF
第三范式(3NF):3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖
简单的说,所有的非主属性只在整个数据库里面出现一次,副键与副键之间,不能存在依赖关系
范式的作用是尽可能避免数据的冗余和插入/删除/更新的异常