我有一个基本的表格,包含以下列:
- id(主键,自增)
- name(唯一性)
- 等等
如果唯一列不存在,则插入该行;否则更新该行......
INSERT INTO pages (name, etc)
VALUES
'bob',
'randomness'
ON DUPLICATE KEY UPDATE
name = VALUES(name),
etc = VALUES(etc)
问题在于,如果执行UPDATE操作,id列上的auto_increment值会增加。因此,如果执行了一堆UPDATE操作,id auto_increment的值就会飙升。显然这是一个bug:http://bugs.mysql.com/bug.php?id=28781,但我在共享主机上使用的是MySQL 5.5.8 InnoDB。
其他人多年前也遇到了类似的问题,但没有解决方案:prevent autoincrement on MYSQL duplicate insert和Why does MySQL autoincrement increase on failed inserts? 有什么修复的想法吗?也许我构建数据库时出了问题?
******编辑****:看起来将innodb_autoinc_lock_mode = 0添加到my.ini文件中可以解决问题,但对于共享主机,我有什么选择?
******编辑2******:好吧,我想我的唯一选择就是更改为MyISAM作为存储引擎。作为一个超级MySQL新手,我希望这不会引起太多问题。是吗?
innodb_autoinc_lock_mode = 0
会因为使用表锁来处理自增字段而降低并发的INSERT
速度。这可能是不好的。 - Enyby