MySQL約束的定義及管理

一、約束類型

  1. 主鍵約束:primary key(列級、表級)
  2. 唯一約束:unique(列級、表級)
  3. 非空約束:not null(列級)
  4. 檢查性約束:check(列級、表級)(MySQL不支持check,無效)
  5. 外鍵約束:foreign key(表級)
  6. 默認值: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';

結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章