MySQL可以对插入的数据进行特定的验证,只有满足条件才允许插入到数据表中,否则被认为是非法的插入。
约束是一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性(一致性)。
例如:一个人的性别只能是男或者女,一个人的年龄0~100之间。
1.非空约束——NOT NULL
NOT NULL:非空约束,声明了非空约束的列上不能插入NULL,用于保证该字段的值不能为空,比如姓名、学号等。
2.默认约束——DEFAULT
DEFAULT:默认约束,用于保证该字段有默认值。
可以使用DEFAULT关键字声明默认值,有两种方式可以应用默认值:
INSERT INTO xz_laptop_family VALUES(40,'苹果',DEFAULT);
INSERT INTO xz_laptop_family(fid,fname) VALUES(50,'华硕');
3.主键约束——PRIMARY KEY
PRIMARY KEY :用于保证该字段的值具有唯一性,比如学号,员工编号等。声明了主键列上的值不能出现重复,表中查询的记录会按照主键由小到大排序——加快查找的速度;通常主键添加到编号列中。
注意:一个表中只能有一个主键。
主键约束和唯一约束的对比:
(1)主键约束和唯一约束都可以保证唯一性,但是主键的值不能为空,而唯一约束的值可以为空;
(2)主键约束列在表中至多只能有1列,而唯一约束列可以在表中有多列;
(3)主键约束与唯一约束都允许进行组合(主键组合时,只有当为主键列的全部列的值都相同时才会报错),但是,都不推荐二者的组合使用。
4.唯一约束——UNIQUE
UNIQUE:声明了唯一约束的列上不能插入重复的值,但是允许插入NULL,而且允许插入多个NULL。
NULL表示空,通常使用在插入数据时,无法确定要保存的数据的情况。例如:无法确定员工的姓名、工资。
5.检查约束——CHECK
CHECK:检查约束可以对插入的数据进行检验。
示例:
CREATE TABLE student(
age TINYINT CHECK(age>=18 AND age<=60 )
);
注意:MySQL不支持检查约束,会降低数据的插入速度。
6.外键约束——FOREIGN KEY
FOREIGN KEY:声明了外键约束的列,取值必须在另一个表的主键列上出现过,且列类型要保持一致,取值可以是NULL。
语法:
FOREIGN KEY(familyId) (此为外键)
REFERENCES xz_laptop_family(fid)(此为引用的主键)
注意:
(1)要求在从表上设置外键约束;
(2)从表的外键列类型要与主表的关联列的类型要求一致或者兼容,但列名无要求;
(3)主表上的关联列要求必须时一个key(一般时主键约束、唯一约束或者外键约束);
(4)插入数据时,先插入主表,再插入从表,而删除数据时,先删除从表再删除主表。