在MySQL中同时使用AUTO_INCREMENT和PRIMARY KEY有什么意义?

What's the point of using AUTO_INCREMENT and PRIMARY KEY at the same time in MySQL?

在MySQL,我理解如下


AUTO_INCREMENT:用于使INT值在用户每次创建行时自动增加。

PRIMARY KEY:用于使 value 在 table 中独一无二。


然而,我经常看到它们在定义 id 时一起使用。

我不明白将 AUTO_INCREMENTPRIMARY KEY 一起使用的意义,因为 AUTO_INCREMENT 本身会使 id 独一无二。

创建id时是否有任何原因将它们一起使用?

你理解的没错,但是他们做的事情不一样。

PRIMARY KEYAUTO_INCREMENT 表示我们希望此列的值不重复,如果我们未设置该值,它将自动增加。

但是我们只设置AUTO_INCREMENT怎么样,它只是意味着如果我们没有设置该值,它会自动增加。但没有确保该值是唯一的。

主键具有三个属性:

  1. 独一无二。
  2. 它是非空的。
  3. 每个table只有一个。

将键定义为主键意味着它也应该用于外键引用。

此外,MySQL 通过主键对数据进行聚类。因此,声明指示新行位于 table 的 "end" 处——意思是与数据页上的最新插入相邻。

此外,可以通过多种方式创建自动递增 ID 的重复值。一种方法是可以重置增量计数器,从而导致重复。 MySQL 对于并发更新的副本来说应该是非常线程安全的,但是已经报告了错误。作为 primary key,不允许重复项进入 table。

AUTO_INCREMENT 不会使列唯一。如果缺少,它只会在创建行时 "automatically" 填充一个值。但是您可以稍后更新值,或者也可以通过显式提供值来创建行。

PRIMARY KEY 拒绝任何会导致 2 个不同条目存储相同值的修改 sql 语句。所以它向您保证,您的数据库处于正确的状态。