本文将简单介绍几种常见的约束类型,以及添加/修改/删除约束的方式
一、约束类型
在MySQL中,有如下几种约束:
(1) NOT NULL:指示某列不能存储空值
(2) UNIQUE:保证某列的每行必须有唯一的值
(3) PRIMARY KEY:指示某一列为表的主码,是非空且唯一的
(4) CHECK:保证列中的值符合指定的条件
(5) DEFAULT:规定没有给列赋值时的默认值
(6) FORIGN KEY:保证列中的数据必须来源于另一个表的某一列(参照完整性)
二、添加约束
1、建表时添加约束
例如 在新建instructor表时
设置ID为主码,name有非空约束,dept_name有默认值
并设置检查约束salary>0
create table instructor{
ID varchar(5) PRIMARY KEY,
name varchar(20) NOT NULL,
dept_name varchar(20) DEFAULT ‘Physcis‘,
salary decimal(8,2),
CHECK(salary>0)
};
2、表结构已存在时添加约束
有2种写法:
(1)仅为某一列添加约束
//添加NOT NULL约束:用第(2)种写法
//添加UNIQUE约束
alter table table_name
add UNIQUE(column_name);
//添加PRIMARY KEY约束
alter table table_name
add PRIMARY KEY(column_name);
//添加DEFAULT约束
alter table table_name
add CHECK(指定条件);
//添加DEFAULT约束
alter table table_name
alter column_name set DEFAULT ‘xxx‘;
(2)更改(重写)某一列的数据类型、约束类型(推荐)
alter table table_name
modify column column_name data_type constraint;
三、修改约束
上述提到的alter+modify的写法 同样可以用于修改约束类型
例如 在instructor表中 修改dept_name的默认值为‘Music‘
alter table instructor
modify column dept_name varchar(20) DEFAULT ‘Music‘;
四、删除约束
//删除NOT NULL约束:用alter+modify
//删除PRIMARY KEY
alter table table_name
drop PRIMARY KEY;
//删除DEFAULT约束
alter table table_name
alter column_name drop DEFAULT;
当需要删除UNIQUE或CHECK约束时
我们需要查看建表语句 show create table table_name \G
来获取约束的别名
例如 已知在student表中
对 tot_credit列有CHECK约束 (tot_cred>=0)
如上图所示,这个CHECK约束的别名为‘student_chk_1‘
接下来就可以删除这个约束了
alter table student
drop CHECK student_chk_1;
我们可以用类似的方式 来删除UNIQUE约束
alter table table_name
drop index constraint_name;