在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_INCREMENT
与 PRIMARY KEY
一起使用的意义,因为 AUTO_INCREMENT
本身会使 id
独一无二。
创建id
时是否有任何原因将它们一起使用?
你理解的没错,但是他们做的事情不一样。
PRIMARY KEY
和 AUTO_INCREMENT
表示我们希望此列的值不重复,如果我们未设置该值,它将自动增加。
但是我们只设置AUTO_INCREMENT
怎么样,它只是意味着如果我们没有设置该值,它会自动增加。但没有确保该值是唯一的。
主键具有三个属性:
- 独一无二。
- 它是非空的。
- 每个table只有一个。
将键定义为主键意味着它也应该用于外键引用。
此外,MySQL 通过主键对数据进行聚类。因此,声明指示新行位于 table 的 "end" 处——意思是与数据页上的最新插入相邻。
此外,可以通过多种方式创建自动递增 ID 的重复值。一种方法是可以重置增量计数器,从而导致重复。 MySQL 对于并发更新的副本来说应该是非常线程安全的,但是已经报告了错误。作为 primary key
,不允许重复项进入 table。
AUTO_INCREMENT
不会使列唯一。如果缺少,它只会在创建行时 "automatically" 填充一个值。但是您可以稍后更新值,或者也可以通过显式提供值来创建行。
PRIMARY KEY
拒绝任何会导致 2 个不同条目存储相同值的修改 sql 语句。所以它向您保证,您的数据库处于正确的状态。
在MySQL,我理解如下
AUTO_INCREMENT
:用于使INT
值在用户每次创建行时自动增加。
PRIMARY KEY
:用于使 value
在 table 中独一无二。
然而,我经常看到它们在定义 id
时一起使用。
我不明白将 AUTO_INCREMENT
与 PRIMARY KEY
一起使用的意义,因为 AUTO_INCREMENT
本身会使 id
独一无二。
创建id
时是否有任何原因将它们一起使用?
你理解的没错,但是他们做的事情不一样。
PRIMARY KEY
和 AUTO_INCREMENT
表示我们希望此列的值不重复,如果我们未设置该值,它将自动增加。
但是我们只设置AUTO_INCREMENT
怎么样,它只是意味着如果我们没有设置该值,它会自动增加。但没有确保该值是唯一的。
主键具有三个属性:
- 独一无二。
- 它是非空的。
- 每个table只有一个。
将键定义为主键意味着它也应该用于外键引用。
此外,MySQL 通过主键对数据进行聚类。因此,声明指示新行位于 table 的 "end" 处——意思是与数据页上的最新插入相邻。
此外,可以通过多种方式创建自动递增 ID 的重复值。一种方法是可以重置增量计数器,从而导致重复。 MySQL 对于并发更新的副本来说应该是非常线程安全的,但是已经报告了错误。作为 primary key
,不允许重复项进入 table。
AUTO_INCREMENT
不会使列唯一。如果缺少,它只会在创建行时 "automatically" 填充一个值。但是您可以稍后更新值,或者也可以通过显式提供值来创建行。
PRIMARY KEY
拒绝任何会导致 2 个不同条目存储相同值的修改 sql 语句。所以它向您保证,您的数据库处于正确的状态。