ON DUPLICATE KEY UPDATE的自动增量太多

Nat*_*ers 17 mysql auto-increment on-duplicate-key

我有一个带有列的基本表:

  • id(主要用于AI)
  • 名称(唯一)
  • 等等

如果唯一列不存在,则INSERT该行,否则更新行....

INSERT INTO pages (name, etc)
VALUES
  'bob',
  'randomness'
ON DUPLICATE KEY UPDATE
 name = VALUES(name),
 etc = VALUES(etc)
Run Code Online (Sandbox Code Playgroud)

问题是如果它执行UPDATE,id列上的auto_increment值会上升.因此,如果执行了大量UPDATES,则id auto_increment会通过屋顶.

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

...但我在mySQL 5.5.8上使用InnoDB共享主机.

其他几年前没有解决问题的人: 防止MYSQL重复插入时的自动增量以及 为什么MySQL自动增量会因失败的插入而增加?

关于修复的想法?我是否可能以某种方式错误地构建了数据库?

******编辑****:似乎在你的my.ini文件中添加innodb_autoinc_lock_mode = 0修复了问题,但我对共享主机有什么选择?

******编辑2******:好的,我认为我唯一的选择是改为MyISAM作为存储引擎.作为一个超级mySQL新手,我希望这不会导致很多问题.是吗?

ype*_*eᵀᴹ 13

我认为没有办法绕过这种行为INSERT ... ON DUPLICTE KEY UPDATE.

但是,您可以在一个事务中放入两个语句,一个UPDATE和一个:INSERT

START TRANSACTION ;

UPDATE pages
SET etc = 'randomness'
WHERE name = 'bob' ;

INSERT INTO pages (name, etc)
SELECT 
      'bob' AS name
    , 'randomness' AS etc 
FROM dual 
WHERE NOT EXISTS
      ( SELECT *
        FROM pages p
        WHERE p.name = 'bob'
      ) ;

COMMIT ;
Run Code Online (Sandbox Code Playgroud)