UNIQUE约束和主键的比较
2018-08-14 本文已影响54人
叫我老村长
about-BY-gentle.jpg
UNIQUE约束和主键的比较
可以使用 UNIQUE 约束确保在非主键列中不输入重复的值。尽管 UNIQUE 约束和 PRIMARY KEY 约束都强制唯一性,
但想要强制一列或多列组合(不是主键)的唯一性时应使用 UNIQUE 约束而不是 PRIMARY KEY 约束。
原因:可以对一个表定义多个 UNIQUE 约束,但只能定义一个 PRIMARY KEY 约束。
而且,UNIQUE 约束允许 NULL 值,这一点与 PRIMARY KEY 约束不同。不过,当与参与 UNIQUE 约束的任何值一起使用时,每列只允许一个空值。
外键中:
FOREIGN KEY 约束可以引用 UNIQUE 约束
什么时候用UNIQUE约束,而不是主键
创建唯一约束可确保在未参与主键的特定列中不输入重复值。尽管唯一约束和主键都强制唯一性,
但以下情况如下,则应向表附加唯一约束而不是主键约束:
- 希望在某一列或某一组列中强制唯一性。您可以向表附加多个唯一约束,但只能向表附加一个主键约束。
- 希望在允许空值的列中强制唯一性。您可以向允许空值的列附加唯一约束,但只能向不允许空值的列附加主键约束。当向允许空值的列附加唯一约束时,请确保在所约束的列中最多只有一行包含空值。
唯一可以多个实例:
*************************** 1. row ***************************
Table: unique8
Create Table: CREATE TABLE `unique8` (
`id` int(11) NOT NULL,
`age` int(11) DEFAULT NULL,
`num` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `age` (`age`),
UNIQUE KEY `num` (`num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
唯一的唯一性验证实列:
mysql> select * from unique8;
+----+------+------+
| id | age | num |
+----+------+------+
| 1 | NULL | NULL |
+----+------+------+
1 row in set (0.01 sec)
mysql> insert into unique8 values(1,null,null);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into unique8 values(1,22,22);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into unique8 values(2,22,22);
Query OK, 1 row affected (0.06 sec)
mysql> insert into unique8 values(3,22,22);
ERROR 1062 (23000): Duplicate entry '22' for key 'age'