导读


有时候我们需要插入数据,但是插入的数据有一个字段或者一部分是从另一个表查询出来的某个字段,而且插入时还有主键或者唯一约束,这个时候就需要忽略或者更新。

使用


不存在插入,存在更新

on duplicate key update

假设唯一主键是name。
如果插入的数据会导致UNIQUE 索引PRIMARY KEY发生冲突/重复,则执行UPDATE语句,例:

  1. INSERT INTO `user`(`name`, `age`) VALUES('Jack', 19)
  2. ON DUPLICATE KEY
  3. UPDATE `age`=20; -- If will happen conflict, the update statement is executed
  4. -- 2 row(s) affected

replace into

如果插入的数据会导致UNIQUE 索引PRIMARY KEY发生冲突/重复,则先删除旧数据再插入最新的数据,例:

REPLACE INTO `user`(`name`, `age`) VALUES('小米', 21);

-- 2 row(s) affected

忽略重复插入

ignore

关键字/句:insert ignore into,如果插入的数据会导致UNIQUE索引PRIMARY KEY发生冲突/重复,则忽略此次操作/不插入数据,例:

INSERT IGNORE INTO `user`(`name`, `age`) VALUES('小米', 22);

-- 0 row(s) affected

实际使用

user_unid和dept_unid都是唯一主键,查询如果不存在插入,存在更新:

INSERT IGNORE into sys_user_role(user_unid,role_unid)  select DEPT_UNID,'ddbea2ce3a574a7eb0ec92010ce1d70c'
 FROM sys_dept
 WHERE dept_belongto in(SELECT DEPT_UNID FROM sys_dept where dept_belongto ='001') and DEPT_IS_ENABLED = 1 order by DEPT_SORT

END


参考:MySQL不存在则插入,存在则更新或忽略