如何在同一行中插入 id 的编号?
How to insert id's number in the same row?
我正在尝试将 id
的数字放在相邻列中。像这样:
+----+-------------------+
| id | identical_with_id |
+----+-------------------+
id
是 AUTO 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
我正在尝试将 id
的数字放在相邻列中。像这样:
+----+-------------------+
| id | identical_with_id |
+----+-------------------+
id
是 AUTO 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