一尘不染

带有ON DUPLICATE KEY UPDATE的自动增量太多

mysql

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

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

如果唯一列不存在,则插入行,否则更新行…。

INSERT INTO pages (name, etc)
VALUES
  'bob',
  'randomness'
ON DUPLICATE KEY UPDATE
 name = VALUES(name),
 etc = VALUES(etc)

问题在于,如果它执行UPDATE,则id列上的auto_increment值会上升。因此,如果执行了大量更新,则id
auto_increment会通过屋顶。

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

…但是我在共享主机上在MySQL 5.5.8上使用InnoDB。

几年前其他人还没有解决方案的问题:
防止MYSQL重复插入自动增加
为什么失败插入MySQL自动增加?

修复思路?我是否可能以某种方式不正确地构造了数据库?

** EDIT **:似乎在您的my.ini文件中添加了innodb_autoinc_lock_mode =
0可以解决此问题,但是对于共享托管我有哪些选择?

** EDIT 2
****:好的,我认为我唯一的选择是更改为MyISAM作为存储引擎。作为一个大型的mySQL新手,我希望不会引起很多问题。是啊


阅读 239

收藏
2020-05-17

共1个答案

一尘不染

我认为没有办法绕过的这种行为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 ;
2020-05-17