普通的 insert into 插入:
insert into card(cardno, cardnum) values('1111', '100');insert into card(cardno, cardnum) values('2222', '200');...
对于普通的 insert 插入,如果想要保证不插入重复记录,我们只有对某个字段创建唯一约束实现(比如:cardno卡号不能重复);
那有没有不创建唯一约束,仅通过 insert into 一条语句实现的方案呢?
答案:有的, insert into if exists 具体语法如下:
insert into table(field1, field2, fieldn) select 'field1', 'field2', 'fieldn' from dual where not exists(select field from table where field = ?)
其中的 dual 是一个临时表,不需要物理创建,这么用即可。
针对上面的card示例的改造如下:
insert into card(cardno, cardnum) select '111', '100' from dual where not exists(select cardno from card where cardno = '111');insert into card(cardno, cardnum) select '222', '200' from dual where not exists(select cardno from card where cardno = '222');
搞定!