我听说主键意味着唯一。如果我错了,请纠正我。
假设我们有一个用户表。它有 3 列 id、用户名和密码。我们通常将 id 设置为 AUTO_INCREMENT。因此,每次我们向表中添加一行时,它在技术上都会生成一个新的唯一 ID。那么,为什么我们还要将 id 列设置为 Primary Key 或 Unique?
我听说主键意味着唯一。如果我错了,请纠正我。
假设我们有一个用户表。它有 3 列 id、用户名和密码。我们通常将 id 设置为 AUTO_INCREMENT。因此,每次我们向表中添加一行时,它在技术上都会生成一个新的唯一 ID。那么,为什么我们还要将 id 列设置为 Primary Key 或 Unique?
主键做两件事:
强制数据库完整性(列的唯一性和非空值)
创建一个索引来实现它,这也使得通过主键列快速查找作为“副作用”。
如果您可以确保在您的应用程序代码中(例如仅使用自动增量值),您可能并不严格需要 (1),但这并没有什么坏处。
不过,您几乎肯定想要 (2)。
因此,每次我们向表中添加一行时,它在技术上都会生成一个新的唯一 ID
好吧,这取决于你。仅当您未指定显式值时才会插入唯一 ID。从技术上讲,它不能保证是唯一的,它只是一个自动增量,不考虑表中的任何现有值(可能以某种方式结束)。
将列作为键提供了其他方面。首先,如果它是主要的或唯一的,这将强制没有查询可以为该键输入重复值。键也可以让你做类似的事情
INSERT ... ON DUPLICATE KEY UPDATE...
当然,您还需要列上的索引以进行快速查找。
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 列如何重复。