今天插入数据时遇到数据重复的问题,为了避免重复数据我尝试以下几种方法,最终选择使用replace into并成功解决数据重复的问题。
方法一 : replace into
如果有相同主键(PRIMARY KEY)或者唯一约束(UNIQUE KEY)的记录时,先删除此记录,再重新插入。
需要注意的是:如果原来的记录存在(1,ab,22),新记录为(1,ab),那么replace后第三个字段为null,因此使用replace into 时需要保证数据的完整性。
假设id为主键,name为唯一约束:
REPLACE INTO `user` ( `id`, `name`, `age` )
VALUE
( 1, 'ab', 22 )
方法二: on duplicate key update
如果有相同主键(PRIMARY KEY)的记录时,则执行update操作,如果不存在,则执行insert操作。
假设id为主键:
INSERT INTO `user` ( `id`, `name`, `age` )
VALUE
( 1, 'ab', 22 )
ON DUPLICATE KEY UPDATE `name` = 'ab',age = 22
方法三 : insert … select … where not exist
根据select的条件判断是否插入,如果没有就插入,有就忽略:
INSERT INTO `user` ( `id`, `name`, `age` ) SELECT 1,'ab',22
FROM
`user`
WHERE
NOT EXISTS ( SELECT id FROM `user` WHERE id = 1 AND NAME = 'ab' )
方法四 : insert ignore into
如果已经存在相同的记录,则忽略当前新数据,如果没有,就插入当前新数据:
INSERT IGNORE INTO `user` ( `id`, `name`, `age` )
VALUE
( 1, 'ab', 22 )