一、約束類型
- 主鍵約束:primary key(列級、表級)
- 唯一約束:unique(列級、表級)
- 非空約束:not null(列級)
- 檢查性約束:check(列級、表級)(MySQL不支持check,無效)
- 外鍵約束:foreign key(表級)
- 默認值:default(列級)
二、定義約束
clazz表:cid、cname
create table clazz(
cid int primary key,
cname varchar(10)
);
student表:sid、scard、sname、cid、sage
列級約束:主鍵 唯一 非空 外鍵(無效) 默認
create table student(
sid int primary key,
scard varchar(10) unique,
sname varchar(10) not null,
cid int,
sage int default 10
);
表級約束:主鍵 唯一 非空(不支持) 外鍵 默認(不支持)
primary key無論是否命名,約束名都爲primary
create table student(
sid int,
scard varchar(10),
sname varchar(10),
cid int,
sage int,
primary key(sid),
constraint stu_scard_uk unique(scard),
constraint stu_cid_fk foreign key(cid) references clazz(cid)
);
通用寫法:
create table student(
sid int primary key,
scard varchar(10) unique,
sname varchar(10) not null,
cid int,
sage int default 10,
constraint stu_cid_fk foreign key(cid) references clazz(cid)
);
三、添加與刪除約束
-- 1.主鍵約束
-- 列級約束
alter table student modify column sid int primary key;
-- 表級約束、刪除
alter table student add primary key(sid);
alter table student drop primary key;
-- 2.唯一約束
-- 列級約束
alter table student modify column scard varchar(10) unique;
-- 表級約束、刪除
alter table student add constraint stu_scard_uk unique(scard);
alter table student drop index stu_scard_uk;
-- 3.非空約束
-- 列級約束
alter table student modify column sname varchar(10) not null;
alter table student modify column sname varchar(10) null;
-- 4.檢查性
-- 5.外鍵
-- 表約束、刪除
alter table student add constraint stu_cid_fk foreign key(cid) references clazz(cid);
alter table student drop foreign key stu_cid_fk;
-- 6.默認
-- 列級約束、刪除
alter table student modify column sage int default 10;
alter table student modify column sage int;
四、查看約束
結合desc命令和information_schema.table_constraints表查看約束
desc:
desc student;
結果:
information_schema.table_constraints:
select * from information_schema.table_constraints where table_name = 'student';
結果: