一、约束类型
• 非空约束(not null)
• 唯一性约束(unique)
• 主键约束(primary key) PK
• 外键约束(foreign key) FK
• 检查约束(目前 MySQL 不支持、Oracle 支持)
二、创建表时添加约束
2.1查询表中的约束信息
SHOW KEYS FROM 表名
2.2示例一
创建 departments 表包含 department_id 该列为主键且自动增长,department_name 列不允许重复,location_id 列不允含有空值。
1 create table departments( 2 department_id int primary key auto_increment, 3 department_name varchar(30) unique, 4 location_id int not null);
2.3示例二
创建 employees 表包含 employees_id 该列为主键且自动增长,last_name 列不允许含有 空值,email 列不允许有重复不允许含有空值,dept_id 为外键参照 departments 表的主键。
create table employees( employees_id int primary key auto_increment, last_n ame varchar(30) not null, email varchar(40) not null unique, dept_id int, constrain temp_fk foreign key(dept_id) references departments(department_id));
三、修改表实现约束的添加与删除
3.1主键约束
3.1.1 添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(列名)
示例 :
将 emp 表中的 employee_id 修改为主键且自动增长
添加主键:alter table emp add primary key(employee_id);
添加自动增长:alter table emp modify employee_id int auto_increment;
3.1.2 删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY
注意:删除主键时,如果主键列具备自动增长能力,需要先去掉自动增长,然后在删除 主键。
示例:
删除 employee_id 的主键约束。
去掉自动增长: alter table emp modify employee_id int;
删除主键:alter table emp drop primary key;
3.2非空约束
3.2.1 添加非空约束
ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL
示例 :
向 emp 表中的 salary 添加非空约束。
alter table emp modify salary float(8,2) not null;
3.2.2 删除非空约束
ALTER TABLE 表名 MODIFY 列名 类型 NULL
示例 :
删除 salary 的非空约束。
alter table emp modify salary float(8,2) null;
3.3唯一约束
3.3.1 添加唯一约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名)
示例:
向 emp 表中的 name 添加唯一约束。
alter table emp add constraint emp_uk unique(name);
3.3.2 删除唯一约束
ALTER TABLE 表名 DROP KEY 约束名
示例:
删除 name 的唯一约束。
alter table emp drop key emp_uk;
3.4外键约束
3.4.1 添加外键约束
ALTER TABLE 表 名 ADD CONSTRAINT 约 束 名 FOREIGN KEY( 列 名 ) REFERENCES 参照的表名(参照的列名)
示例一:
修改 emp 表,添加 dept_id 列。
alter table emp add column dept_id int; 6.3.4.1.2
示例二:
向 emp 表中的 dept_id 列添加外键约束。
alter table emp add constraint e_fk foreign key(dept_id) references departments(department_id);
3.4.2 删除外键约束
删除外键:
ALTER TABLE 表名 DROP FOREIGN KEY 约束名
删除外键索引(索引名与约束名相同):
ALTER TABLE 表名 DROP INDEX 索引名
示例:
删除 dept_id 的外键约束。
删除外键:alter table emp drop foreign key e_fk;
删除索引:alter table emp drop index e_fk;