含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:六大约束
1.not null 非空,保证该字段的只不能为空
2.default 默认,用于保证该字段有默认值
3.primary key 主键,用于保证该字段的值唯一,且非空
4.unique 唯一,用于保证该字段的值唯一,但可以为空
5.check 检查约束(mysql中不支持)
6.foreign key 外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
添加的时机
1.创建表时
2.修改表时
约束的添加分类:
列级约束
六大约束语法均可,但外键约束没有效果
表级约束
除了非空和默认,其他的都支持
一、创建表时添加约束
1.添加列级约束
create table stuinfo
(
id int primary key,#主键
stuName varchar(20) not null,#非空
gender char(1) check(gender = '男' or gender = '女'),#检查约束
seat int unique,#唯一约束
age int default 18,#默认约束
majorId int
)
直接在字段名和类型名追加约束类型即可,check和外键不支持
2.添加表级约束
create table stuinfo
(
id int,
stuName varchar(20),
gender char(1),
seat int,
age int,
majorId int
constraint pk primary key(id),#主键
constraint uq unique(seat),#唯一
constraint ck check(gender....)
constraint fk_stufnfo_major foreign key(majorId) references major(id)#外键
)
语法:在各个字段的最小码
【constraint 约束名】 约束类型(字段名)【】内容可以省略
主键和唯一键的比较
保证唯一性 | 是否允许为空 | 一个表可以有多少个 | 是否允许组合 | |
主键 | 可以 | 不可以 | 至多有一个 | 可以,但不推荐 |
唯一 | 可以 | 可以 | 可以有多个 | 可以,但不推荐 |
外键的要求:
1.要求从表设置外键关系
2.从表的外键列的类型和主表的关联列的类型要求一致,名称无要求
3.主表的关联列必须是一个键(主键或唯一键)
4.插入数据时,先插入主表,再插入从表,删除数据时,先删除从表,再删除主表
二、修改表时添加约束
1.添加列级约束
alter table 表名 modify column 列名 类型 约束名
2.添加表级别约束
alter table 表名 add unique(列名)
三、修改表时删除约束
alter table 表名 modify column 列名 类型
或者
alter table 表名 drop 约束名
删除唯一
alter table 表名 drop index 列名
删除外键
alter table 表名 drop foreign key 外键名
删除主键
alter table 表名 drop primary key
注意 删除主键外键唯一只能用 drop