回答
不同之处在于: 主键默认会创建聚簇索引,并且一个表中只能存在一个PK。主键可以覆盖多个列(复合键)
没有两个不相同,但是相似,当列是唯一的时,它具有唯一值,但它也允许该列中有一个Null值,但是Primary不允许任何空值。主键可用于其他表中的参考。
在声明UNIQUE约束只能有一个表中的但多个唯一键
主键,SQL Server创建唯一索引加快寻找重复的过程。在这种情况下,索引默认为NONCLUSTERED索引,因为每个表只能有一个CLUSTERED索引。
- 每个表的唯一约束数受限于表上的索引数,即249 NONCLUSTERED索引和一个可能的CLUSTERED索引。
与PRIMARY键相反,UNIQUE约束可以接受NULL而只是一次。如果约束是在字段组合中定义的,那么每个字段都可以接受NULL,并且可以有一些值,只要组合值是唯一的。
快乐编码!
“UNIQUE约束可以接受NULL但只是一次”:与AvatarKava所说的相矛盾:UNIQUE键可能为NULL,并且允许多个NULL值。哪一个? – Thilo 2010-03-16 06:23:52
From:http://dev.mysql.com/doc/refman/5.0/en/create-index.html UNIQUE索引创建一个约束条件,以便索引中的所有值都必须是不同的。如果尝试使用与现有行匹配的键值添加新行,则会发生错误。此约束不适用于除BDB存储引擎以外的NULL值。对于其他引擎,UNIQUE索引允许可以包含NULL的列的多个NULL值。如果您为UNIQUE索引中的列指定前缀值,则列值在前缀中必须是唯一的。 – AvatarKava 2010-03-16 06:30:40
这个问题被标记为“mysql”,但我相信Oracle还允许多个NULL值(两个NULL永远不会相等)。这似乎是更自然的惯例。 – Thilo 2010-03-16 06:35:03
没有。将列设置为唯一与将其设置为主键或主键的一部分非常不同。
没有。
PRIMARY KEY必须是唯一的,但UNIQUE键不一定是主键。你可以在一个表中有多个UNIQUE键。
关键的区别是PRIMARY键不能有NULL值,因为它们必须唯一标识一行。 UNIQUE键可能是NULL,并且允许多个NULL值(除非您使用像BDB这样的非常见表引擎)。
呃这是一个无意的可怕的双关语。 – AvatarKava 2010-03-16 06:08:56
我似乎记得试图在表上创建一个唯一的索引,并且因为多个NULL值而无法访问,但我必须绊倒。 – Duncan 2010-03-16 06:25:11
可能已经回到了4.x,邓肯 - 我相信他们确实有那个约束:http://dev.mysql.com/doc/refman/5.0/en/create-index.html – AvatarKava 2010-03-16 06:31:26
UNIQUE仍然可以为NULL。
PRIMARY KEY表示UNIQUE和NOT NULL,每个表只能有一个PRIMARY KEY。
不,它们不是等价的。唯一键可能具有空值,但主键不允许具有空值。 以下是说明差异的链接 http://sqlhints.com/2013/06/02/difference-between-primary-key-and-unique-key-in-sql-server/
- 1. MySQL不尊重UNIQUE和PRIMARY-KEY
- 2. RowGuide和UNIQUE KEY
- 3. MySQL。同一字段的UNIQUE和PRIMARY KEY约束
- 4. MySQL KEY/UNIQUE KEY
- 5. UNIQUE INDEX和UNIQUE KEY有什么区别?
- 6. UNIQUE和UNIQUE KEY之间的区别mySQL
- 7. PRIMARY KEY和FOREIGN KEY到我的表
- 8. 如何确定哪个UNIQUE索引在Oracle中实施PRIMARY KEY
- 9. SQL AUTO_INCREMENT PRIMARY KEY仅适用于UNIQUE名称字段
- 10. SQLite typlessness和PRIMARY KEY更改
- 11. SQL - 只有UNIQUE或PRIMARY KEY约束可以对计算列创建
- 12. PostgreSQL:是否可以为PRIMARY KEY或UNIQUE提供自定义名称?
- 13. SQL ALTER TABLE ADD PRIMARY KEY error1064
- 14. 违反PRIMARY KEY约束“PK_
- 15. UNIQUE,UNIQUE KEY和CONSTRAINT'name'UNIQUE之间有什么区别?
- 16. Spring Data JPA:findOne with unique key
- 17. UNIQUE KEY以任何顺序
- 18. MySql`id`列有'PRIMARY'和'UNIQUE'索引,这是理想吗?
- 19. SQL PRIMARY KEY重复错误与3个表中的PRIMARY KEY相同
- 20. 缺少强制PRIMARY KEY部件版本
- 21. PRIMARY KEY上的索引名称
- 22. 在Android中重置INTEGER PRIMARY KEY AUTOINCREMENT
- 23. 修改AUTO_INCREMENT PRIMARY KEY进行分区
- 24. 无法在Maria中创建PRIMARY KEY dB
- 25. 违反PRIMARY KEY约束错误SQL
- 26. 带对象类型的PL/SQL PRIMARY KEY
- 27. MySQL - 使用UNIQUE KEY的正确方法?
- 28. XSD:如何在元素值中使用'unique'和'key'/'keyref'?
- 29. 如何使外键引用另一个表中的NOT Primary或Unique列?
- 30. 在什么情况下SELECT可以通过PRIMARY KEY慢?
您可以拥有跨越多个列的唯一约束。 – Thilo 2010-03-16 06:05:27