(MySQL)为什么ID列应该设置为主键(是唯一的)?

时间:2013-04-03 00:39:18

标签: mysql

我听说Primary Key意味着独一无二。如果我错了,请纠正我。

假设我们有一个用户表。它有3列id,用户名和密码。我们通常将id设置为AUTO_INCREMENT。因此,每次我们向表中添加一行时,它在技术上会创建一个新的唯一ID。那么,为什么我们还将id列设置为Primary Key或Unique?

3 个答案:

答案 0 :(得分:1)

主键有两件事:

  1. 强制实施数据库完整性(列的唯一性和非空)

  2. 创建一个实现该索引的索引,这也可以使主键列快速查找为"副作用"。

  3. 如果您可以在应用程序代码中确保(例如仅使用自动增量值),则可能不严格需要(1),但它不会受到伤害。

    但你几乎肯定想要(2)。

      

    因此,每次我们在表格中添加一行时,它在技术上会创建一个新的唯一ID

    嗯,这取决于你。如果您未指定显式值,则仅插入唯一ID。从技术上讲,它不能保证是唯一的,它只是一个自动增量,不考虑表中的任何现有值(可能以某种方式最终在那里)。

答案 1 :(得分:1)

将列作为键提供了其他方面。首先,如果它是主要的或唯一的,这将强制执行没有查询可以为该键输入重复值。键也可以让你做像

这样的事情
INSERT ... ON DUPLICATE KEY UPDATE...

当然,您还需要列上的索引以便快速查找。

答案 2 :(得分:1)

AUTO_INCREMENT行为仅在插入期间未指定列时显示。考虑:

CREATE TABLE ai (
    ai int unsigned not null auto_increment,
    oi int unsigned,
    key (ai),
    primary key (oi)
);
INSERT INTO ai VALUES (1,2);
INSERT INTO ai VALUES (1,3);
INSERT INTO ai VALUES (null,5);

这将产生(1,2), (1,3), (2,5)。请注意AUTO_INCREMENT列如何重复。