mysql from dual插入实现不插入重复记录

Posted 弹指一瞬间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql from dual插入实现不插入重复记录相关的知识,希望对你有一定的参考价值。

mysql中插入一或者多条记录的时候,要求某个字段的值唯一,但是该字段没有添加唯一性索引,可用from dual解决。

 

select * from (
select ‘2015080109‘ a,2 b,4 c,5 d from dual
union
select ‘2015080106‘ a,2 b,4 c,5 d from dual
) a where not exists (select lottery_no from user b where a.a = b.lottery_no)

 

INSERT INTO user  (id, no,add_time,remark)
select * from (
SELECT 1 id, 1 no, NOW() add_time,‘1,2,3,1,2‘ remark FROM DUAL 
UNION ALL 
SELECT 1 no, 2 no, NOW() add_time,‘1,2,3,1,2‘ remark FROM DUAL
UNION ALL
SELECT 1 no, 3 no, NOW() add_time,‘1,2,3,1,2‘ remark FROM DUAL
) a where not exists (select no from user b where a.no = b.no)

上述是实现user表的no字段不重复,插入三条记录。

 

下面是mybatis批量写入no字段不重复的实现语句。

INSERT INTO user (id, no,add_time,result)
select * from (
<foreach collection="list" item="obj" separator=" UNION ALL " >
SELECT #{obj.id} id, #{obj.no} no, #{obj.addTime} add_time,#{obj.remark} remark FROM DUAL
</foreach>
) a where not exists (select no from user b where a.no = b.no)

 

只是完成了实现,还不了解其中原理。

 

















以上是关于mysql from dual插入实现不插入重复记录的主要内容,如果未能解决你的问题,请参考以下文章

在插入多行时,语句“select 1 from dual”的作用是啥?

mysql插入数据时检查是否某字段已存在

mysql 插入时带判断条件

MySQL 语句级避免重复插入—— Insert Select Not Exist

mysql 指定的字段如果重复(已存在),则不再插入

MYSQL数据库,老是被插入重复记录,怎么解决?(附代码)