导读
有时候我们需要插入数据,但是插入的数据有一个字段或者一部分是从另一个表查询出来的某个字段,而且插入时还有主键或者唯一约束,这个时候就需要忽略或者更新。
使用
不存在插入,存在更新
on duplicate key update
假设唯一主键是name。
如果插入的数据会导致UNIQUE 索引或PRIMARY KEY发生冲突/重复,则执行UPDATE语句,例:
INSERT INTO `user`(`name`, `age`) VALUES('Jack', 19)ON DUPLICATE KEYUPDATE `age`=20; -- If will happen conflict, the update statement is executed-- 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
