记录mysql写入数据时避免重复的几种方法……
MySQL插入新数据不重复的方法:
1.insert ignore into
当插入数据时,如出现错误,如重复数据(唯一索引或主键重复),将不返回错误,只以警告形式返回。所以使用ignore请确保语句本身没有问题,否则也会被忽略掉
INSERT IGNORE INTO demo (name) VALUES ('Demo');
2.on duplicate key update
当主键或唯一索引出现重复时,则执行update语句,不重复则执行insert语句。适用于遇到重复数据时只修改个别字段的场景(如果是写入操作返回1,更新操作返回2)
INSERT INTO demo (name) VALUES ('Demo') ON duplicate KEY UPDATE `num` = num+1 , `state` = 2;
3.insert … select … where not exist
根据select的条件判断是否插入,可以不光通过主键和索引来判断,也可以自定义其它条件,这种方式运用更灵活。(这里的exist作用是判断后面的查询是否有数据存在,如果有数据则表示这个where条件为true)例如:
INSERT INTO demo (name) SELECT 'Demo' FROM demo WHERE NOT EXISTS (SELECT id FROM books WHERE id = 1)
4.replace into
当主键或唯一索引出现重复时,则先删除重复数据,再写入新记录,没有重复数据则直接写入。适合用于覆盖重复数据
REPLACE INTO demo (name) VALUES('Demo');
四种方法的区别:
ignore into: 会忽略重复写入的报错,相当于跳过不对重复数据做任何操作;
duplicate: 在遇到重复数据时可以很方便的对单个或多个指定字段进行更新;
where not exist: 这种方式稍微麻烦点,但是非常适合除了重复以外的自定义条件;
replace into : 实现的过程是先删除重复数据再写入,因此会导致主键的变动,且等于覆盖所有数据;