1

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

4

0 回答 0