通过对列中的数据强制条件,约束提供了额外的数据完整性。每当操作值(插入、删除或更新)时,将检查约束,并拒绝违反约束的修改。 例如,UNIQUE约束要求列中的所有值彼此唯一(空值除外)。如果尝试写入重复的值,则约束将拒绝整个语句。
| 约束类型 | 描述信息 |
|---|---|
| CHECK | 对于布尔表达式,值必须返回TRUE或NULL。 |
| DEFAULT value | 如果在INSERT语句中未为受约束列定义值,则将默认值写入该列。 |
| FOREIGN KEY | 值必须与它引用的列中的现有值完全匹配。 |
| NOT NULL | 值不能为空。 |
| PRIMARY KEY | 值必须唯一标识每一行(每个表一行)。这就好像应用了NOTNULL和UNIQUE约束,并使用约束列自动为表创建索引一样。 |
| UNIQUE | 每个非空值必须唯一。这还会使用受约束的列自动为表创建索引。 |
1.创建表并在单列上添加主键约束
CREATE TABLE foo (a INT PRIMARY KEY);2.创建表并在多列上添加主键约束
CREATE TABLE bar (a INT, b INT, PRIMARY KEY (a,b));备注:默认和非空约束不能应用于多个列。
3.在已创建的表中添加约束条件
ALTER TABLE baz ADD CONSTRAINT id_unique UNIQUE (id);ALTER TABLE baz ALTER COLUMN bool SET DEFAULT true;备注:PRIMARY KEY 和 NOT NULL 约束只能在创建时添加。
CREATE TABLE foo (a INT CONSTRAINT another_name PRIMARY KEY);CREATE TABLE bar (a INT, b INT, CONSTRAINT yet_another_name PRIMARY KEY (a,b));SHOW CONSTRAINTS or SHOW CREATE.| 约束类型 | 操作 |
|---|---|
| CHECK | Use DROP CONSTRAINT |
| DEFAULT value | Use ALTER COLUMN |
| FOREIGN KEY | Use DROP CONSTRAINT |
| NOT NULL | Use ALTER COLUMN |
| PRIMARY KEY | 不支持删除主键操作。但是,可以使用此过程将表的数据移动到新表中。 |
| UNIQUE | 不支持直接删除唯一约束操作。若要删除约束,请删除由该约束创建的索引,例如,删除索引myunique约束。 |
| 约束类型 | 操作 |
|---|---|
| CHECK | 开启事务,添加一个新的CHECK约束(ADD constraint),然后删除现有的CHECK约束(DROP constraint)。 |
| DEFAULT value | 默认值可以通过ALTER COLUMN更改。 |
| FOREIGN KEY | 开启事务,添加一个新的外键约束(ADD constraint),然后删除现有的外键约束(DROP constraint)。 |
| NOT NULL | 不能更改NOT NULL约束,只能将其删除。但是,可以使用此过程将表的数据移动到新表中。 |
| PRIMARY KEY | 无法修改主键。但是,可以使用此过程将表的数据移动到新表中。 |
| UNIQUE | 开启事务,添加一个新的唯一约束(ADD constraint),然后删除现有的唯一约束(DROP constraint)。 |