问题重现下:
表结构:
CREATE TABLE `model` (
`mo_id` smallint(6) NOT NULL AUTO_INCREMENT,
`mo_name` varchar(50) DEFAULT NULL,
`br_id` smallint(6) DEFAULT NULL,
`preview_pic` varchar(100) DEFAULT NULL,
PRIMARY KEY (`mo_id`),
UNIQUE KEY `mo_name` (`mo_name`,`preview_pic`),
KEY `model_fk_1` (`br_id`),
CONSTRAINT `model_fk_1` FOREIGN KEY (`br_id`) REFERENCES `brand` (`br_id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8
下面是数据的情况,使用insert ignore的时候,1-9行,是原先就存在的数据,但是在新一轮的插入过程中,由于已经存在所以mysql不执行插入操作,但是问题来了,mo_id这个自增列的id值增加了,导致了自增列不连续的问题。

数据库数据
经过搜索与下面的配置有关系:
innodb_autoinc_lock_mode = 0
将上面的配置添加到/etc/mysql/my.cnf文件中(可能不大一样,自己找下)
这时需要注意,添加的位置:
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/mysql/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
innodb_autoinc_lock_mode=0
我原先是添加在my.cnf文件的最后的,但是发现配置无效然后重新启动下mysql服务器就可以了
sudo /etc/init.d/mysql restart
参考资料:
http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html
http://blog.itsail.com/?p=122