0

我听说主键意味着唯一。如果我错了,请纠正我。

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

4

3 回答 3

1

主键做两件事:

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

  2. 创建一个索引来实现它,这也使得通过主键列快速查找作为“副作用”。

如果您可以确保在您的应用程序代码中(例如仅使用自动增量值),您可能并不严格需要 (1),但这并没有什么坏处。

不过,您几乎肯定想要 (2)。

因此,每次我们向表中添加一行时,它在技术上都会生成一个新的唯一 ID

好吧,这取决于你。仅当您未指定显式值时才会插入唯一 ID。从技术上讲,它不能保证是唯一的,它只是一个自动增量,不考虑表中的任何现有值(可能以某种方式结束)。

于 2013-04-03T00:43:58.450 回答
1

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

INSERT ... ON DUPLICATE KEY UPDATE...

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

于 2013-04-03T00:45:24.910 回答
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 列如何重复。

于 2013-04-03T00:45:53.850 回答