存在即更新,不存在即插入:
我们平常的INSERT INTOSQL是这么写:
INSERT INTO demo_in(a,b,c) VALUES(123, 2, 4);
比如C是主键,插入2次就会抛出异常:
[23000][1062] Duplicate entry '4' for key 'PRIMARY'
所以我们用到REPLACE关键字,他的作用如题,存在即更新,不存在即插入,和delete+Insert Into一样。但是它一个原子操作,是一步完成,所以我们不用担心有其他问题的出现,但是使用REPLACE的时候,一定要保证表有唯一主键。
重要:执行REPLACE语句后,系统返回了所影响的行数,如果返回1,说明在表中并没有重复的记录,如果返回2,说明有一条重复记录,系统自动先调用了DELETE删除这条记录,然后再记录用INSERT来插入这条记录。
改造一下上面的语句就是:
REPLACE INTO demo_in(a,b,c) VALUES(123, 2, 4);
存在不插入,不存在再插入:
这个其实很简单,因为Mysql不能做到插入的时候带where条件,故用了一张临时表来处理。
INSERT INTO demo_in(a,b,c) SELECT 123, 2, 4 FROM DUAL WHERE NOT EXISTS(SELECT c FROM demo_in WHERE c = 4);
用临时表DUAL来标记数据,然后插入到demo_in表中。条件是c=4,并且not exists,也就是当c=4条件满足,则不插入。
https://www.cnblogs.com/yelbosh/p/5813865.html
网友评论