AUTO_INCREMENT 有什么意义?

What's the point of AUTO_INCREMENT?

我正在使用 MySQL 学习 SQL,我可能还不知道某些语法,但我只是想知道,如果每当我在 table 中插入一条新记录 我必须指定我每次插入的所有其他列,除了我自动递增的列,例如,第一列设置为自动递增,现在我想插入一个记录: INSERT INTO table(col2, col3, col4, col5...) VALUES(value2, value3, value4, value5...); 如果我不能指定列并自己增加值,我为什么要这样做?为什么在这种情况下使用 AUTO_INCREMENT?如INSERT INTO table VALUES(incremented_value, value2, value3...) 谢谢

首先,重要的是要了解标识每一行的整数列非常有用。它们用于外键约束并使行的标识“简单”(例如,尝试记住 UUID)。

那么你的问题是“为什么自动递增”?原因很简单。如果你能让数据库保证数据的有效性,那么你就有很多优势。最重要的优势涉及竞争条件——多个线程同时插入 table。

因为数据库保证值是唯一的并且是递增的,——数据库的用户——不必担心重复。编写数据库的人已经为您完成了。

您希望每一行都有一个唯一的主键,并且在许多情况下不需要任何与该键关联的语义(一个具有语义的主键示例,即,与其关联的含义是人的社会安全号码)。在这些情况下,一个简单的整数就足以作为主键。

很明显,当您将下一行插入这样的 table 时,您要确保用于主键的整数值不存在于 table ] 已经。因此,AUTO_INCREMENT 主键列使您无需跟踪已使用的值。

现在您可能需要知道用作最后一次插入的主键的实际值是什么,因为后续插入到相关 table 中可能需要它,其中该键值是外键。如果在 INSERT 之后立即发出以下查询,则可以获得在 INSERT 语句之后使用 AUTO_INCREMENT 的列的值:

SELECT LAST_ID();

当然,如果获取这个值是为了插入另一个table作为外键,那么你可以这样做:

INSERT INTO some_other_table(primary_key, foreign_key) VALUES('primary-key-value', LAST_ID());