mysql中INSERT IGNORE 与INSERT INTO,REPLACE INTO的区别

mysql中常用的三种插入数据的语句:

insert into表示插入数据,数据库会检查主键,如果出现重复会报错;
replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;
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

 

table 1

 

id name

 

1    tb

 

2    zp

 

table2

 

id(主键) name

 

1    tb

 

2    cw

 

3    zp

 

insert ignore into table1 select  * from table2执行结果为

 

table1

 

id name

 

1    tb

 

2    zp

 

3    zp

 

注:如果使用的是insert into 发现重复的会报错,而insert ignore  into 发现将要插入的数据行中包含唯一索引的字段值已存在,会丢弃掉这行数据,不做任何处理

 

replace into

 

table 1

 

id name    ps

 

1    tb    a

 

2    zp    b

 

table2

 

id(主键) name

 

1    tb

 

2    cw

 

3    zp

 

replace into table1 select  * from table2执行结果为

 

table1

 

id name  ps

 

1    tb      NULL

 

2    cw     NULL

 

3    zp     NULL

 

注:REPLACE发现重复的先删除再插入,如果记录有多个字段,在插入的时候如果有的字段没有赋值,那么新插入的记录这些字段为空。

总结

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

时间: 2024-09-24 12:04:31

mysql中INSERT IGNORE 与INSERT INTO,REPLACE INTO的区别的相关文章

mysql中如何嵌套使用insert和select

如何在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现.具体情形是:有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,我们可以使用如下的语句来实现: INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name 当然,上面的语句比较适合两个表的数据互插,如果多个表就不适应了.对于多个表,我们可以先将需要查询的字段join起来,然后组成一个视图后再

mysql中SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

SELECT INTO 和 INSERT INTO SELECT 两种表复制语句       Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)       这种形式的在应用程序开发中必不可少.但我们在开发.测试过程中,经常会遇到需要表复制的情况,       如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们       就

INSERT IGNORE 与 INSERT INTO的区别

例 insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据: insert ignore into table(name)  select  name from table2 例 INSERT INTO有无数据都插入,如果主键则不插入 1.insert语句一次可以插入多组值,每组值用一对圆括号括起来,用逗号分隔,如下: insert into `news`(title,body,time) values('www.111cn.net','body 1',now()),('ti

mysql中char、varchar、nvarchar数据类型的用法区别

说明: 1.char: 固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符. 2.varchar: 可变长度的非 Unicode 数据,最长为 8,000 个字符. 3.nvarchar: 可变长度 Unicode 数据,其最大长度为 4,000 字符. 4.nchar 固定长度的 Unicode 数据,最大长度为 4,000 个字符. 5.char和varchar都是字符串类型的 用Unicode编码的字符串,结果是字符的整数值 如有以下数据结构: 工号 姓名 部门 ---

mysql中导入数据load data在myisam与innodb区别

innodb数据表结构如下:  代码如下 复制代码 Create Table: CREATE TABLE `tinnodb` ( `id` int(11) DEFAULT NULL, `content` mediumtext ) ENGINE=InnoDB DEFAULT CHARSET=utf8 表中的数据为4194304行,通过select into outfile导出  代码如下 复制代码 root@localhost:tiger>select * from tinnodb into ou

mysql中int、bigint、smallint 和 tinyint的区别详细介绍_Mysql

最近使用mysql数据库的时候遇到了多种数字的类型,主要有int,bigint,smallint和tinyint.其中比较迷惑的是int和smallint的差别.今天就在网上仔细找了找,找到如下内容,留档做个总结: 使用整数数据的精确数字数据类型. bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. P.S. bigint已经有长度了,在mysql建表中的len

Mysql中order by、group by、having的区别深入分析_Mysql

order by 从英文里理解就是行的排序方式,默认的为升序. order by 后面必须列出排序的字段名,可以是多个字段名.  group by 从英文里理解就是分组.必须有"聚合函数"来配合才能使用,使用时至少需要一个分组标志字段. 什么是"聚合函数"? 像sum().count().avg()等都是"聚合函数" 使用group by 的目的就是要将数据分类汇总. 一般如: select 单位名称,count(职工id),sum(职工工资)

MySQL的insert ignore与replace into的对比

关于replace 一句话:正常情况下表中有PRIMARY KEY或UNIQUE索引,新数据会替换老的数据.没有老数据则insert该数据. REPLACE的运行与INSERT很相像.只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除.使用REPLACE相当于对原有的数据(在PRIMARY KEY或UNIQUE索引下有值的数据)进行delete操作,然后再insert操作.为了能够使用REPLACE,您

MySQL中REPLACE INTO和INSERT INTO的区别分析_Mysql

注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义.该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行. [separator] 所有列的值均取自在REPLACE语句中被指定的值.所有缺失的列被设置为各自的默认值,这和INSERT一样.您不能从当前行中引用值,也不能在新行中使用值.如果您使用一个例如"SET col_name = col_name + 1"的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(c