约束就是让数据库帮助程序员更好的检查数据是否正确!

NOT NULL指定某列不能存储NULL值



UNI保证某列的每行必须有唯一的值


数据库是如何判断这条记录是重复的,先查找再插入,如果没有重复的就插入,重复了不允许插入。
约束是可以组合在一起使用的,同时加上not null和unique

PRI = primary key4
主键约束就是not null和unique

主键也同样是在插入记录的时候先查找再插入的
正因为主键和unique都有先查询的过程,mysql就会默认给primary key 和 unique 这样的列,自动添加索引来提高查询的速度

插入id的时候,可以手动指定,也可以不动手指定(null),则会有mysql自动生成。



当mysql的数据量比较小,所有的数据都在一个mysql服务器上时,自增主键是可以很好工作的。
如果mysql的数据量很大,一台主机放不下,就需要进行分库分表,使用多个主机来进行存储了。本质上就是把一张大表分成多个小表,每个数据库服务器分别只存储一部分数据。

default 规定没有给列赋值时的默认值


file:///C:/Users/jinchunyi/Desktop/1107_mysql.png 
foreign key 外键约束,针对两个表之间产生的约束

此处外键约束的含义就是要求student里的classId务必要在class表的id列中存在。
学生表中的数据要依赖班级表的数据,班级表的数据要对学生表产生约束力(父亲对孩子有约束力),此处起到约束作用的班级表就叫做父表,被约束的表叫做子表
外键约束是父表约束子表,但实际上子表也在约束父表。

我们试图删除class表中id为1的记录,发现删除失败,因为id为1的被子表引用了。
id为3的没有被子表引用,可以删除
如果想删除,那就需要先删除子表,再删除父表
创建外键约束时,一定是先创建父表再创建子表
教务系统中,一个学生对应一个账号
教务系统中,班级和学生的关系
学生和班级放在不同的表里,相互关联
教务系统中,课程和学生的关系
三张表:

如果两个实体往上述三个关系中都套不进去,就是没关系
如何通过关系建表: