13.2.5 数据库约束 2.UNIQUE约束
唯一约束用于保证指定列或指定列组合不允许出现重复值。虽然唯一约束的列不可以出现重复值,但可以出现多个null值(因为在数据库中null不等于null)。
同一个表内可建多个唯一约束,唯一约束也可由多列组合而成。当为某列创建唯一约束时,MySQL会为该列相应地创建唯一索引。如果不给唯一约束起名,该唯一约束默认与列名相同。
唯一约束既可以使用列级约束语法建立,也可以使用表级约束语法建立。
如果需要为多列建组合约束,或者需要为唯一约束指定约束名,则只能用表级约束语法。
当建立唯一约束时,MySQL在唯一约束所在列或列组合上建立对应的唯一索引。
使用列级约束语法建立唯一约束
使用列级约束语法建立唯一约束非常简单,只要简单地在列定义后增加unique关键字即可。SQL语句如下:
1 | create table unique_test |
表级约束语法建立唯一约束
如果需要为多列组合建立唯一约束,或者想自行指定约束名,则需要使用表级约束语法。表级约束语法格式如下:
1 | [constraint 约束名] 约束定义 |
上面的表级约束语法格式既可放在create table语句中与列定义并列,也可放在alter table语句中使用add关键字来添加约束。SQL语句如下:
1 | create table unique_test2 |
上面的建表语句为test_name、test_pass分别建立了唯一约束,这意味着这两列都不能出现重复值。除此之外,还可以为这两列组合建立唯一约束,SQL语句如下:
1 | create table unique_test3 |
对于上面的unique_test2和unique_test3两个表,都是对test_name、test_pass建立唯一约束,其中unique_test2要求test_name、test_pass都不能出现重复值,而unique_test3只要求test_name、test_pass两列值的组合不能重复。
修改表结构时增加或删除唯一约束
也可以在修改表结构时使用add关键字来增加唯一约束,SQL语句如下:
1 | alter table unique_test3 |
还可以在修改表时使用modify关键字,为单列采用列级约束语法来增加唯一约束,代码如下:
1 | alter table unique_test3 |
对于大部分数据库而言,删除约束都是在alter table语句后使用“drop constraint约束名”语法来完成的,但MySQL并不使用这种方式,而是使用“drop index 约束名”的方式来删除约束。例如如下SQL语句:
1 | alter table unique_test3 |
原文链接: 13.2.5 数据库约束 2.unique约束