数据库约束
约束就是让数据库帮助程序员更好的检查数据是否正确!
1、not null
NOT NULL指定某列不能存储NULL值
2、unique
UNI保证某列的每行必须有唯一的值
数据库是如何判断这条记录是重复的,先查找再插入,如果没有重复的就插入,重复了不允许插入。
约束是可以组合在一起使用的,同时加上not null和unique
PRI = primary key4
主键约束就是not null和unique
主键也同样是在插入记录的时候先查找再插入的
正因为主键和unique都有先查询的过程,mysql就会默认给primary key 和 unique 这样的列,自动添加索引来提高查询的速度
- 实际开发中,大部分的表一般都会带一个主键,主键往往是一个整数表示的id
- 在mysql中,一个表里只能有一个主键,不能有多个
- 虽然主键不能有多个,mysql允许把多个列放到一起共同作为一个主键(联合主键)
- 主键另外一个非常常用的方法,就是使用mysql自带的"自增主键"作为主键的值,
插入id的时候,可以手动指定,也可以不动手指定(null),则会有mysql自动生成。
当mysql的数据量比较小,所有的数据都在一个mysql服务器上时,自增主键是可以很好工作的。
如果mysql的数据量很大,一台主机放不下,就需要进行分库分表,使用多个主机来进行存储了。本质上就是把一张大表分成多个小表,每个数据库服务器分别只存储一部分数据。
3、default
default 规定没有给列赋值时的默认值
file:///C:/Users/jinchunyi/Desktop/1107_mysql.png
4、foreign key
foreign key 外键约束,针对两个表之间产生的约束
此处外键约束的含义就是要求student里的classId务必要在class表的id列中存在。
学生表中的数据要依赖班级表的数据,班级表的数据要对学生表产生约束力(父亲对孩子有约束力),此处起到约束作用的班级表就叫做父表,被约束的表叫做子表
外键约束是父表约束子表,但实际上子表也在约束父表。
我们试图删除class表中id为1的记录,发现删除失败,因为id为1的被子表引用了。
id为3的没有被子表引用,可以删除
如果想删除,那就需要先删除子表,再删除父表
创建外键约束时,一定是先创建父表再创建子表
数据库实体的关系:
1、一对一
教务系统中,一个学生对应一个账号
- 把学生和账号放到同一个表里
- 学生和账号放在不同的表里,相互关联
2、一对多
教务系统中,班级和学生的关系
学生和班级放在不同的表里,相互关联
3、多对多
教务系统中,课程和学生的关系
三张表:
4、没关系
如果两个实体往上述三个关系中都套不进去,就是没关系
如何通过关系建表:
- 找实体,给每个实体都安排个表(需求中的关键字)
- 明确实体的关系(往固定造句格式中套)
- 根据这些关系使用固定的方法来建表