在 MySQL 中,您可以同时插入一行并更新“最后插入 ID”。我使用这个技巧能够有条件地插入项目(唯一性)并且在所有情况下仍然获得唯一的 ID。
下面的代码有效。问题是该ON DUPLICATE KEY
语句还更新了Auto_increment
值。有可能避免这种情况吗?
CREATE TABLE T(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
X VARCHAR(64) NOT NULL UNIQUE
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
INSERT INTO T(X) VALUES ('x') ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);
SELECT LAST_INSERT_ID();
INSERT INTO T(X) VALUES ('x') ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id);
SELECT LAST_INSERT_ID();
现在我们有了一个条目id=1
。但是,下一个条目将具有id=3
自第二个失败Auto_increment
时更新值以来的值。INSERT
这可以检查如下:
SELECT Auto_increment FROM information_schema.tables WHERE table_name = 't'
AND table_schema = DATABASE();
问:是否可以使用此技巧(或等效方法)并保持Auto_increment
价值?显然,在这种情况下,它不需要更新。