Nat*_*ers 17 mysql auto-increment on-duplicate-key
我有一个带有列的基本表:
如果唯一列不存在,则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)