约束是在表上强制执⾏的数据校验规则。约束主要⽤于保证数据库的完整性
五类完整性约束
NOT NULL——非空约束
UNIQUE Key——唯一约束
PRIMARY KEY——主键约束
FOREIGN KEY——外键约束
默认约束
自动增长
约束的注意点
创建约束的时机(在建表的同时创建,修改表时创建)
可以定义列级约束或表级约束
有单列约束和多列约束
约束也有自己的名字
约束的定义方式
在列中定义约束:[CONSTRAINT 约束名] 约束类型(列名)
语法:alter table 表名 add constraint 约束名 约束类型(要约束的列名)
NOT NULL——非空约束
注意事项:
列级约束,只能使用列级约束语法定义。
确保字段值不允许为空
只能在字段级定义
CREATE TABLE student(
NAME VARCHAR(18) NOT NULL;
)
NULL的说明
所有数据类型的值都可以是NULL。
空字符串不等于NULL。
0也不等于NULL。
2.UNIQUE Key——唯一约束
注意事项:
唯一性约束条件确保所在的字段或者字段组合不出现重复值
唯一性约束条件的字段允许出现多个NULL
同一张表内可建多个唯一约束
唯一约束可由多列组合而成
建唯一约束时MySQL会为之建立对应的索引。
如果不给唯一约束起名,该唯一约束默认与列名相同。
CREATE TABLE student(
NAME VARCHAR(18) UNIQUE NOT NULL
)
3.PRIMARY KEY——主键约束
注意事项
主键从功能上看相当于非空且唯一
一个表中只允许一个主键
主键是表中唯一确定一行数据的字段
主键字段可以是单字段或者是多字段的组合
当建立主键约束时,MySQL为主键创建对应的索引
主键约束名总为PRIMARY
CREATE TABLE tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18)
)
4.FOREIGN KEY——外键约束
外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
外键确保了相关的两个字段的两个关系:
子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允
许为空)。
当主表的记录被子表参照时,主表记录不允许被删除。
外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录
CREATE TABLE tb_dept(
dept_id INT PRIMARY KEY,
NAME VARCHAR(18),
description VARCHAR(255)
);
CREATE TABLE tb_employee(
employee_id INT PRIMARY KEY,
NAME VARCHAR(18),
gender VARCHAR(10),
dept_id INT REFERENCES tb_dept(dept_id),
address VARCHAR(255)
)
5.默认约束
可以使用default关键字设置每一个字段的默认值。
create table student(
id int primary key,
sex varchar(18) default "男",
)
6.自动增长
id int auto_increment 放约束后面
-自动增长一个表只有有一个,字段类型是整数,必须是唯一或者主键约束字段
删除表的约束
删除NOT NULL约束
alter table 表名 modify 列名 类型
删除UNIQUE约束
alter table 表名 drop index 惟一约束名;添加唯一约束alter table student add unique(id);
删除唯一约束alter table student drop index id;
删除PRIMARY KEY约束
alter table 表名 drop primary key; /*删除主键约束*/添加主键约束alter table student add primary key (id);
删除主键alter table student drop primary key;
删除FOREIGN KEY约束
alter table 表名 drop foreign key 外键名;