数据库约束
数据库约束是针对数据库中的表中的数据进行施加规则和条件,用于确保数据的准确性和可靠性。
数据库约束类型
1)not null 非空类型 :指定非空类型的列不能存储null,如果插入的数据是null便会报错。
2)default 默认约束:当没有指定插入值时,设定一个默认值进行插入。
当没有使用default设置默认值时,使用desc table 观察表的结构时,default这一栏就是null;这时在创建表时使用default设置默认值,就可以观察到default中设置的默认值。
3)unique唯一约束:指定约束的每列必须有唯一值。
指定列出现相同值会报错。
4)primary key 主键约束:每一行记录的身份标识,类似not null 和unique的组合,可以由一个或多个列组成,但是一个表里只能有一个主键。
主键必须是唯一值,且不能包含null。
这是直接创建主键:
创建自增主键:
自增主键一般是用于int ,bigint类型,如果使用主键修饰varchar就会报错。
主键值可以不连续,当默认自增主键时不设置值插入,由1开始自增,如果插入一条设置好值的记录,下一条记录就会从最大的值开始继续自增。
5)foreign key 外键约束:外键约束是一种关系型约束,用于两个表之间进行关联。
通过这样的两个表中,class中的classid通过外键去约束student中的classid这样的方式,此时,class表就叫做父表,student就叫做子表,父表是约束别人的表,具体而言就是student表的数据要出自class表中。
使用外键创建一个子表:
和主键不同,外键是像设置变量一样单独一项,foreign key后的括号内填写的是当前要创建子表时要用外键被约束的变量,references是出自的意思,后面接父表的约束别人的变量。
当插入一个不存在于父表的数据(只有被外键约束的变量要出自父表),就会报错;同样的要是修改一个不存在父表的值也会报错。
创建一个父表:
这里要注意要约束子表的变量要使用主键或unique修饰。
对父表而言,进行删除和修改的数据已经被子表引用也是不可取的,会报错,如果父表被外键约束的变量没有被子表引用,修改和删除是可操作的。
要想直接删除父表,会报错,因为要想删除父表要先删除父表里的记录,但是有一条记录被子表引用,此时就会报错。所以就要先删除子表再删除父表。
表的设计
根据实际的需求,明确要创建几个表,这几个表之间的存在什么样的关系:
先梳理好几个表中的“实体”(这里的实体例如教务系统中的学生,班级,作业.....)。
再确定实体间的关系。
实体间的关系
不同的关系设计表也是不同的
1)一对一:例如一个学生只能拥有一个账号,一个账号也只能被一个学生拥有。
2)一对多:例如一个学生只能在一个班级,但是一个班级可以包含多个学生。
3)多对多:一个学生可以选择多门课程,一门课程可以包含多个学生。
4)没关系