实际项目中经常遇到向一个表中插入一条数据,如果主键重复的时候就作更新操作,一般发生在获取主键值的情况下。
1. 创建数据库表
CREATE TABLE zdytest(
id int NOT NULL ,
name varchar(255) NULL ,
PRIMARY KEY (id)
);
2. 插入一条数据
INSERT INTO zdytest (id,NAME) VALUES(1,'张三')
3. 常规实现方式
查询---->判断是否存在---->不存在插入,存在修改。
4. 判断脚本实现方式
IF NOT EXISTS(select * from zdytest where id = 1)
INSERT INTO zdytest(id,NAME) VALUES(1,'李四')
ELSE
UPDATE zdytest set name='王五' where id=1
5. Mysql自带的replace into
REPLACEinto zdytest (id,NAME) VALUES(1,'李四');
6. 写法形式
replace into tbl_name(col_name, ...)values(...)
replace into tbl_name(col_name, ...) select...
replaceinto tbl_name set col_name=value, ...
7. 实现逻辑说明
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。
8. 注意事项
插入数据的表必须有主键或者是唯一索引!否则的话,replaceinto 会直接插入数据,这将导致表中出现重复的数据。