【问题标题】:MySQL ON DUPLICATE KEY seems to increment the auto_increment column when triggeredMySQL ON DUPLICATE KEY 似乎在触发时增加了 auto_increment 列
【发布时间】:2010-02-09 18:34:54
【问题描述】:

考虑以下 SQL:

CREATE TABLE USER1
(
  pkUSER1_ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
  DATE_UPDATED TIMESTAMP NULL DEFAULT NULL,
  NAME VARCHAR(25) NOT NULL,
  CONSTRAINT PRIMARY KEY (pkUSER1_ID),
  CONSTRAINT UNIQUE (NAME)
)
ENGINE = INNODB;

INSERT INTO USER1
   SET NAME = 'asdf'
    ON DUPLICATE KEY
UPDATE DATE_UPDATED = NOW();

INSERT INTO USER1
   SET NAME = 'asdf'
    ON DUPLICATE KEY
UPDATE DATE_UPDATED = NOW();

INSERT INTO USER1
   SET NAME = 'asdf1'
    ON DUPLICATE KEY
UPDATE DATE_UPDATED = NOW();

SELECT * FROM USER1;

现在注意结果集。尽管没有插入任何内容,但 auto_increment 增加了。

+------------+---------------------+-------+
| pkUSER1_ID | DATE_UPDATED        | NAME  |
+------------+---------------------+-------+
|          1 | 2010-02-09 13:29:15 | asdf  |
|          3 |                NULL | asdf1 |
+------------+---------------------+-------+

我在两台不同的服务器上得到不同的行为......上面的输出来自 MySQL v5.0.45 在 2.6.9-023stab048.6-enterprise 上运行(我认为它是 Red Hat)。在 2.6.26-2-amd64(显然是 Debian)上运行的 MySQL v5.0.51a-24+lenny2-log 上不存在该问题。

是否有我可以更改的配置设置来避免这种情况?我的数据库中有大约 300 个用户,但是由于插入/更新语句运行的频率,最新的用户 id 超过了 600,000。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    这是一个错误...http://bugs.mysql.com/bug.php?id=28781

    不确定为什么客户端运行的是 3 年前的 MySQL。

    【讨论】:

    • 从那张票:«我将其关闭为“不是错误”。 auto_increment 的行为可以通过 config 参数(如前所述)来控制,并且 autoinc 值的间隙是预期的。我会确保我们在文档中添加更多内容来阐明这一点。»
    猜你喜欢
    • 1970-01-01
    • 2014-09-29
    • 2017-09-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多