约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性。
分类:
约束 | 关键字 |
---|---|
主键约束(PK) | PRIMARY KEY |
唯一约束(UQ) | UNIQUE |
默认约束(DF) | DEFAULT |
非空约束(NOT NULL) | NOT NULL |
检查约束 | CHECK |
外键约束(FK) | FOREIGN KEY |
查看约束
show create table 表名;
创建表时设置约束
-- 主键约束
create table students(
id int,
name varchar(20),
primary key (id)
);
create table students(
id int primary key,
name varchar(20)
);
-- 唯一约束
create table students(
id int,
name varchar(20),
constraint up unique(id)
);
create table students(
id int,
name varchar(20) unique
);
-- 默认约束
create table students(
id int,
name varchar(20) default '未知'
);
-- 非空约束
create table students(
id int,
name varchar(20) not null
);
-- 检查约束
create table employees (
id int primary key auto_increment,
name varchar(50),
age int,
check (age >= 18) -- 添加检查约束:年龄必须大于等于18
);
-- 外键约束
create table 表名(从表)(
id int,
name varchar,
rid int,
constraint 约束名 foreign key(列名(从表)) references 主表(列名)
);
修改某一列的约束
-- 主键约束
alter table 表名 add primary key(列名);
alter table 表名 modify id int primary key;
alter table 表名 change id id int primary key;
-- 唯一约束
alter table 表名 add unique(列名);
alter table 表名 modify id int unique;
alter table 表名 change id id int unique;
-- 默认约束
alter table 表名 modify id int default 默认值;
alter table 表名 change id id int default;
-- 非空数据
alter table 表名 modify id int not null;
alter table 表名 change id id int not null;
-- 检查约束
alter table 表名 change 列名 列名 列类型 check(约束条件);
alter table 表名 modify 列名 列类型 check(约束条件);
-- 外键约束
alter table 表名 add constraint 约束名 foreign key (从表字段) references 主表表名(主表字段);
删除约束
-- 主键约束
alter table 表名 drop primary key;
-- 唯一约束
alter table 表名 drop index 设置唯一约束的列名称;
-- 默认约束
alter table 表名 modify id int;
-- 非空数据
alter table 表名 modify id int;
-- 检查约束
alter table 表名 drop constraint 约束名;
-- 外键约束
alter table 表名 drop foreign key 约束名;
联合主键
-- 创建表时设置
create table 表名(
列名1 数据类型,
列名2 数据类型,
列名2 数据类型,
primary key (列名1,列名2));
-- 修改某一列时设置
alter table 表名 add primary key (列名1,列名2);
-- 删除
alter table 表名 drop primary key;
自增长列 (auto_increment)
-- 直接设置自增长
create table goods(
id int primary key auto_increment,
name varchar(10)
);
-- 修改
alter table 表名 modify 列名 列类型 auto_increment;
为自增长列
alter table 表名 change 列名 列名 列类型 auto_increment;
-- 删除自增长列
alter table 表名 modify id int;
外键约束
级联删除/更新外键列的数据
on delete cascade /on update cascade
在删除/更新主表时,外键列的值变为NULL
on delete set null / on update set null