在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
值?显然,在这种情况下,它不需要更新。