我有一个带有列的基本表:
如果唯一列不存在,则插入行,否则更新行…。
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新手,我希望不会引起很多问题。是啊
我认为没有办法绕过的这种行为INSERT ... ON DUPLICTE KEY UPDATE。
INSERT ... ON DUPLICTE KEY UPDATE
但是,您可以在一个事务中放入两个语句,一个UPDATE和一个:INSERT
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 ;