我有一张叫做学生的桌子:
+------------+------------+-----------+---------------------+---------------------+
| 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)'是什么意思?这是否意味着如果主键不是唯一的,请查看电子邮件,看看它是否是唯一的?还是别的什么?
由于
答案 0 :(得分:2)
UNIQUE
关键字为其参数列表中提到的列(在本例中为email
)创建唯一约束。它不会干扰主键。它将在电子邮件列上强制使用唯一值,也就是说,当一行将要INSERT
ed(或UPDATE
d)与现有行发生冲突时,会失败并显示异常。
主键(默认情况下)表示唯一约束。因此,当您将student_id指定为主键时,RDBMS也会自动为该列保留唯一值。
答案 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