insert into select 时,能跳过存在的记录吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了insert into select 时,能跳过存在的记录吗相关的知识,希望对你有一定的参考价值。

可以,加个 not exists 条件就可以
insert into a(id, name)
select id, name from b
where not exists (select 1 from a where a.id = b.id);
参考技术A 不可以,程序不能少的 参考技术B 啥意思,,,
insert into (xxxx) select xxxx
这语句,本来就是必须要有存在的表,但是可以没有数据,也可以有数据

还有一种

SELECT xxx into test2 from test1

这样的,这个是要求test2必须不存在的本回答被提问者和网友采纳
参考技术C 能就比较k看了,l来了,
老嫖客老婆,
贫困,lm看,平面,了,
刘建明,‘
参考技术D where 条件限制不就好了

INSERT IGNORE 与INSERT INTO的区别

 

INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

eg: insert ignore into table(name)  select  name from table2 

 

mysql中常用的三种插入数据的语句:
insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错;
replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样; REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。如果对于一个单行REPLACE该数为1,则一行被插入,同时没有行被删除。如果该数大于1,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制了在不同的唯一索引中的不同旧行的值,则有可能是一个单一行替换了多个旧行。   insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据;
下面通过代码说明之间的区别,如下:

create table testtb(   id int not null primary key,   name varchar(50),   age int );

insert into testtb(id,name,age)values(1,"bb",13);

select * from testtb; insert ignore into testtb(id,name,age)values(1,"aa",13);

select * from testtb;//仍是1,“bb”,13,因为id是主键,出现主键重复但使用了ignore则错误被忽略 replace into testtb(id,name,age)values(1,"aa",12); select * from testtb; //数据变为1,"aa",12




以上是关于insert into select 时,能跳过存在的记录吗的主要内容,如果未能解决你的问题,请参考以下文章

调用 OPENROWSET 时 INSERT INTO 和 SELECT INTO 的区别

INSERT IGNORE 与INSERT INTO的区别

insert into的用法

select into from 和 insert into select

insert into select时自己加上编号

insert into select时自己加上编号