版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jinhangdev/article/details/82470144
MySQL 一条语句实现若记录存在则更新,不存在则插入
问题产生
博主相信很多人在开发的时候难免会出现需要先判断某个记录是否存在,存在则更新,不存在则插入新记录的情况(如在填写报名表的时候有用户需要修改信息等)。通常的做法是先使用 DELETE
语句先删除一下再使用 INSERT INTO
语句插入,这样做显然效率会比较低。
解决办法
MySQL 为我们提供了一个新的途径可以方便地实现仅执行一条 SQL 语句达成这个操,那就是 REPLACE INTO
语句。
使用方法
语句格式:
REPLACE INTO 表名(列名1, 列名2, ..., 列名n) VALUES (值1, 值2, ..., 值n);
例如:
REPLACE INTO students (StuName, Stuid, Class) VALUES ('张三', '123456789', '1234567');
语句原理
REPLACE INTO
语句要求被插入的表需要有已经定义的主键,该语句通过对主键进行检索判断记录是否存在,若记录存在,则对非主键属性进行更新操作;若记录不存在,则插入一条新记录。
受影响的行数
- 当相同主键记录存在,且欲更新的数据与已存在的数据完全相同时(即此时什么都不做),受影响的行数为
1
。 - 当相同主键记录存在,且欲更新的数据与已存在的数据不完全相同时(即此时会更新数据),受影响的行数为
2
。 - 当相同主键记录不存在时,将插入一条新的记录,受影响的行数为
1
。