萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql中INSERT IGNORE 與INSERT INTO,REPLACE INTO的區別

mysql中INSERT IGNORE 與INSERT INTO,REPLACE INTO的區別

在mysql中INSERT IGNORE,INSERT INTO,REPLACE INTO三者都是插入數據到mysql數據庫的語句,那麼這三者之間到底有什麼區別呢?


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會忽略數據庫中已經存在 的數據,如果數據庫沒有數據,就插入新的數據,如果有數據的話就跳過這條數據。這樣就可以保留數據庫中已經存在數據,達到在間隙中插入數據的目的。

copyright © 萬盛學電腦網 all rights reserved