繁体   English   中英

(MySQL)为什么将ID列设置为“主键”(唯一)?

[英](MySQL) Why ID column should be set to Primary Key (being unique)?

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

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

主键有两件事:

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

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

如果可以确保在您的应用程序代码中(例如,仅通过使用auto-increment值),则可能不一定需要(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列如何重复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM