约束
DBMS
通过在数据库表上施加约束来实施引用完整性。大多数约束是在表定义中定义的,用 CREATE TABLE
或是 ALTER TABLE
语句。
主键
主键是一种特殊的约束,用来保证一列(或 一组列)中的值是唯一的,而且永不改动。没有主键,要安全地 UPDATE
或 DELETE
特定行而不影响其他行会 非常困难。
主键的条件:
- 任意两行的主键值都不相同。
- 每行都具有一个主键值(即列中不允许
NULL
值)。
创建表时定义主键。
CREATE TABLE teacher ( id INT(11) PRIMARY KEY, teacher_name VARCHAR(10) ); 复制代码
使用 ALTER TABLE
添加主键。
ALTER TABLE teacher ADD CONSTRAINT PRIMARY KEY(id); 复制代码
删除主键约束。
ALTER TABLE teacher DROP PRIMARY KEY; 复制代码
外键
外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完 整性的极其重要部分。
下面新建 student
表并添加外键 teacher_id
与 teacher
表中的主键 id
进行关联。
在创建表的时定义外键。
CREATE TABLE student ( stu_id INT(11) PRIMARY KEY, teacher_id INT(11) REFERENCES teacher(id), stu_name VARCHAR(10) ); 复制代码
使用 ALTER TABLE
添加外键。
ALTER TABLE student ADD CONSTRAINT teacher_id_id FOREIGN KEY (teacher_id) REFERENCES teacher(id); 复制代码
使用外键可以有效地防止意外删除,比如在上面两表中如果删除 teacher
表中的信息,如果该 id
在 student
表中也有出现,那么 Mysql
会防止删除操作。当然也可以启用级联删除的特性,那么在删除时就会删除所有相关信息。
删除外键。
ALTER TABLE student DROP FOREIGN KEY teacher_id_id; 复制代码
唯一约束
唯一约束用来保证一列(或一组列)中的数据是唯一的。它们类似于主 键,但存在以下重要区别。
- 表可包含多个唯一约束,但每个表只允许一个主键。
- 唯一约束列可包含
NULL
值。 - 与主键不一样,唯一约束不能用来定义外键。
在创建表的时定义唯一约束。
CREATE TABLE student ( stu_id INT(11) PRIMARY KEY, teacher_id INT(11) REFERENCES teacher(id), stu_name VARCHAR(10) ); 复制代码
使用 ALTER TABLE
添加唯一约束。
ALTER TABLE student ADD CONSTRAINT unique_id UNIQUE(stu_id); 复制代码
删除唯一性约束。
ALTER TABLE student DROP INDEX unique_id; 复制代码
检查约束
检查约束用来保证一列(或一组列)中的数据满足一组指定的条件。
常见用途:
- 检查最小或最大值。
- 指定范围。
- 只允许特定的值。
下面创建一个检查约束来限制性别列只能输入男、女。
在创建表的时定义检查约束。
CREATE TABLE student ( stu_id INT(11) PRIMARY KEY, gender VARCHAR(1) CHECK(gender IN('男', '女')) ); 复制代码
使用 ALTER TABLE
添加检查约束。
ALTER TABLE student ADD CONSTRAINT check_gender CHECK(gender in ('男', '女')); 复制代码
删除检查约束。
ALTER TABLE student DROP CHECK check_gender;