使用mysql做insert插入时,会判断是否有此记录 not exists,如果没有就插入 ,有就不做操作
一、之前的做法:
INSERT INTO account (id, name, gender)
SELECT #{id}, #{name} , #{gender}
FROM account
WHERE not exists (select * from account
where name=#{name});
这种做法一直没有发现问题,可是今天account的数据被清空了 ,再执行这条语句的时候,插入不进去。
发现:
1、执行如下代码:
SELECT 2,'xiaoming',0 from account WHERE not EXISTS (
SELECT 1 FROM account WHERE id = 3688
)
执行结果如下:
没数据,所以肯定不会插入成功;
2、给account表插入三条数据之后,再次执行上面sql:
二、解决办法
INSERT INTO account
(id, name, gender)
SELECT #{id}, #{name} , #{gender}
FROM dual
WHERE not exists (select * from account
where name=#{name};