用于限制表中的数据,为了保证表中数据的准确和可靠性
分类:
not null:非空,保证字段的值不为空。如姓名
default:默认约束,用于保证该字段有默认值。如性别
primary key:主键,保证该字段的值具有唯一性,并且非空。如学号
unique:唯一,用于保证该字段的值具有唯一性,但可以为空。如座位号
check:检查【mysql中不支持】。如年龄,性别
foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自主表关联列的值。在从表添加外键约束,用于引用主表中某列的值
添加约束的时机:
- 创建表时
- 修改表时
约束添加的分类:
- 列级约束:
六大约束语法上都支持,但外键约束没有效果 - 表级约束:
除了非空、默认,其他都支持
主键和唯一键的比较:
- 主键不允许为空,唯一键可以为空
- 一个表中只能有一个主键,而唯一键可以有多个
- 都具有唯一性
- 允许组合,但不推荐
外键的特点:
- 要求在从表设置外键关系
- 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
- 主表中的关联列必须是一个key(一般是主键、唯一键)
- 插入数据时,先插入主表、在插入从表。删除数据时,先删除从表,在删除主表
一、创建表时添加约束
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 foreign key references major(id),外键
);
create tbale major(
id int primary key,
majorName varchar(20)
);
show index from 表名
查看表中所有的索引,包括主键,外键、唯一
2.添加表级约束
语法:
在各个字段的最下面
[constraint 约束名] 约束类型(字段名)
create table stuinfo(
id int,
stuname varchar(20),
gender char(1),
seat int,
age int,
majorid int,
constraint pk prmary key(id),主键
constraint uq unique(seat),唯一键
constraint ck check(gender=‘男’ or gender =‘女’),检查
constraint fk stuinfo_major foreign key(majorid) references major(id)外键
)
二、修改表时添加约束
语法:
- 添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;
- 添加表级约束
alter table 表名 add 约束类型(字段名) 外键的引用;
1.添加非空约束
alter table stuinfo modify column stuname varchar(20) not null;
2. 添加默认约束
alter table stuinfo modify column age int default 18;
3. 添加主键
- 列级约束
alter table stuinfo modify column id int primary key;
- 表级约束
alter table stuinfo add primary keuy(id);
- 添加唯一
- 列级约束
alter table stuinfo modify column seat int unique;
- 表级约束
alter table stuinfo add unique(seat);
- 添加外键
alter table stuinfo add [constraint fk_stuinfo_major] forengin key(majorid) references major(id);
三、修改表时删除约束
- 删除非空约束
alter table stuinfo modify stuname varchar(20) null;
- 删除默认约束
alter table stuinfo modify age int;
- 删除主键
alter table stuinfo drop primary key;
- 删除唯一
alter table stuinfo drop index seat;
- 删除外键
alter table stuinfo drop foreign key 外键名