如何在同一行中插入 id 的编号?

How to insert id's number in the same row?

我正在尝试将 id 的数字放在相邻列中。像这样:

+----+-------------------+
| id | identical_with_id |
+----+-------------------+

idAUTO INCREMENT 并且所有需要的是在插入时获取 id 的编号。我可以这样做:

INSERT INTO `table_name`
  VALUES( NULL, 
          (SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES 
             WHERE TABLE_SCHEMA = 'database_name' AND
                   TABLE_NAME   = 'table_name')
        );

但我不知道它是否会一直有效。也许在 执行该子查询 插入该行 之间,插入一个新行(另一行)。在这种情况下,id 的数量将与 neighbor 列不同。哼?这可能吗?


注意:请不要告诉我:"what do you need this for?"

您可以在查询后立即使用 LAST_INSERT_ID()。

INSERT INTO `table_name` VALUES( NULL, NULL);
SELECT LAST_INSERT_ID() INTO @last_id;
UPDATE `table_name` SET duplicate_id_column = @last_id WHERE id = @last_id;

通常每个人有时都需要做这样的事情。而且最好不要问理由:)

我认为你的做法是正确的,但你需要检查你使用的是哪个 MySql 引擎,并确保 inserts 是按顺序执行的。

通常 insert 语句会锁定 table 并在完成后解锁。这意味着您检索 auto increment 的查询非常安全。

对于 MySql 引擎和相关设置,此 post 可以帮助您:

Does a MySQL multi-row insert grab sequential autoincrement IDs?

对于 InnoDb:

http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html