代码之家  ›  专栏  ›  技术社区  ›  Langdon

重复键上的mysql在触发时似乎会增加auto_increment列

  •  0
  • Langdon  · 技术社区  · 15 年前

    考虑以下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;
    

    现在注意结果集。尽管未插入任何内容,但自动增量增加。

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

    我在两个不同的服务器上得到不同的行为…上面的输出来自于运行在2.6.9-023stab048.6-enterprise上的MySQLv5.0.45(我认为是RedHat)。在2.6.26-2-amd64(显然是debian)上运行的mysql v5.0.51a-24+lenny2日志上没有这个问题。

    是否可以更改配置设置以避免发生这种情况?我的数据库中有大约300个用户,但是由于运行insert/update语句的频率,最新的用户ID超过了600000。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Langdon    15 年前

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

    不知道为什么客户端运行的是3年前的MySQL版本。