INSERT INTO table_name VALUES(null,param,..) ON DUPLICATE KEY UPDATE param_name = VALUES(param_name);
ON DUPLICATE KEY UPDATE 会根据主键或唯一索引检索当前记录是否已经存在,存在更新,不存在插入;
优先级:主键 > 唯一索引
在执行ON DUPLICATE KEY UPDATE会发现,如果存在自增ID,默认情况下每次执行结束后,会发现ID跳跃式增长。
mysql中的innodb_autoinc_lock_mode参数存在三种模式:0,1,2。
将ON DUPLICATE KEY UPDATE语句从逻辑层面拆分为两步,先执行update操作,如果update操作影响语句为0,则执行insert操作。
编辑/etc/my.cnf,修改innodb_autoinc_lock_mode=0;
在ON DUPLICATE KEY UPDATE语句后执行
ALTER TABLE table_name auto_increment=1;,但是每次执行这个语句的时候,都会执行alter语句,会导致效率变低。
具体解决办法根据实际业务场景需要选择。