在mysql中,我理解如下 AUTO_INCREMENT
:用于制作 INT
每次用户创建行时自动增加的值。 PRIMARY KEY
:用于制作 value
在那张table上是独一无二的。
但是,我经常看到它们在定义 id
.
我不明白使用 AUTO_INCREMENT
与 PRIMARY KEY
自 AUTO_INCREMENT
它本身会使 id
独一无二。
有没有什么理由在创建时将它们一起使用 id
?
在mysql中,我理解如下 AUTO_INCREMENT
:用于制作 INT
每次用户创建行时自动增加的值。 PRIMARY KEY
:用于制作 value
在那张table上是独一无二的。
但是,我经常看到它们在定义 id
.
我不明白使用 AUTO_INCREMENT
与 PRIMARY KEY
自 AUTO_INCREMENT
它本身会使 id
独一无二。
有没有什么理由在创建时将它们一起使用 id
?
3条答案
按热度按时间wydwbb8l1#
主键有三个属性:
它是独一无二的。
它是非空的。
每张table只有一张。
将键定义为主键意味着它也应该用于外键引用。
另外,mysql通过主键对数据进行聚类。因此,该声明指示新行位于表的“末尾”——即与数据页上最近的插入相邻。
此外,可以通过各种方式为自动递增的id创建重复值。一种方法是可以重置增量计数器,从而导致重复。mysql对于并发更新的副本应该是相当线程安全的,但是已经报告了错误。作为一个
primary key
,表中不允许有重复项。dphi5xsq2#
你理解得对,但他们做的事情不同。
PRIMARY KEY
与AUTO_INCREMENT
意味着我们希望此列在值上不重复,如果未设置值,它将自动增加。但我们只设
AUTO_INCREMENT
它只意味着如果我们没有设置值,它将自动增加。但没有确定这个值是唯一的。5sxhfpxr3#
AUTO_INCREMENT
不会使列唯一。它只在创建行时“自动”填充值(如果缺少)。但是您可以稍后更新这些值,或者通过显式提供值来创建一行。PRIMARY KEY
拒绝任何会导致两个不同条目存储相等值的修改sql语句。因此,它保证您的数据库处于正确的状态。