SQL:创建主键时UNIQUE的含义是什么

时间:2016-06-02 18:25:55

标签: sql

我有一张叫做学生的桌子:

+------------+------------+-----------+---------------------+---------------------+
| student_id | first_name | surname   | email               | reg_date            |  
+------------+------------+-----------+---------------------+---------------------+
|          1 | Emily      | Jackson   | emilyj@gmail.com    | 2012-10-14 11:14:13 |
|          2 | Daniel     | ALexander | daniela@hotmail.com | 2014-08-19 08:08:23 |
|          3 | Sarah      | Bell      | sbell@gmail.com     | 1998-07-04 13:16:32 |
|          4 | Alex       | Harte     | AHarte@hotmail.com  | 1982-06-14 00:00:00 |
+------------+------------+-----------+---------------------+---------------------+    

创建表时:

CREATE TABLE students(
-> student_id INT NOT NULL AUTO_INCREMENT,
-> first_name VARCHAR(30) NOT NULL,
-> surname VARCHAR(50) NOT NULL,
-> email VARCHAR(200) NOT NULL,
-> reg_date DATETIME NOT NULL,
-> PRIMARY KEY (student_id),
-> UNIQUE (email));

'UNIQUE(email)'是什么意思?这是否意味着如果主键不是唯一的,请查看电子邮件,看看它是否是唯一的?还是别的什么?

由于

2 个答案:

答案 0 :(得分:2)

UNIQUE关键字为其参数列表中提到的列(在本例中为email)创建唯一约束。它不会干扰主键。它将在电子邮件列上强制使用唯一值,也就是说,当一行将要INSERT ed(或UPDATE d)与现有行发生冲突时,会失败并显示异常。

主键(默认情况下)表示唯一约束。因此,当您将student_id指定为主键时,RDBMS也会自动为该列保留唯一值。

进一步阅读:http://www.w3schools.com/sql/sql_unique.asp

答案 1 :(得分:1)

它允许引擎将它用作查询中的索引,并在插入/更新记录时强制它是唯一的;在插入/更新已存在的unique key constraint时,违反email

示例:http://sqlfiddle.com/#!9/7a0aee

更多信息:http://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-partitioning-keys-unique-keys.html