天天看點

INERT REPLACE UPDATE差別

replace into表示插入替換資料,需求表中有primarykey,或者unique索引,如果資料庫已經存在資料,則用新資料替換,如果沒有資料效果則和insert into一樣;

replace也可以使用set語句,替換update,update在沒有比對記錄時什麼都不做,而replace在有重複記錄時更新,在沒有重複記錄時插入

INERT REPLACE UPDATE差別

replace into users set id = 123, name = ‘趙本山’, age = 50;  

insert ignore表示,如果表中如果已經存在相同的記錄,則忽略目前新資料;

測試代碼如下:

INERT REPLACE UPDATE差別

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);  

replace into testtb(id,name,age)values(1,"aa",12);  

insert ignore 與insert into的差別就是insert ignore會忽略資料庫中已經存在 的資料,如果資料庫沒有資料,就插入新的資料,如果有資料的話就跳過這條資料。這樣就可以保留資料庫中已經存在資料,達到在間隙中插入資料的目的。

當一個用戶端使用insert delayed 時,會立刻從伺服器處得到一個确定。并且行被排入隊列,當表沒有被其它線程使用時,此行被插入。

使用insert delayed 的另一個重要的好處是,來自許多用戶端的插入被集中在一起,并被編寫入一個塊。這比執行許多獨立的插入要快很多。

說明: insert delayed into,是用戶端送出資料給mysql,mysql傳回ok狀态給用戶端。而這是并不是已經将資料插入表,而是存儲在記憶體裡面等待排隊。當mysql有空餘時,再插入。

  這樣的好處是,提高插入的速度,用戶端不需要等待太長時間。壞處是,不能傳回自動遞增的id,以及系統崩潰時,mysql還沒有來得及插入資料的話,這些資料将會丢失。

注意,當沒有使用表時,insert delayed 比正常的insert 要慢。對于伺服器來說,為每個含有延遲行的表操縱一個獨立的線程,也是一個額外的系統開銷。這意味着隻有當您确認您需要時,才應使用insert delayed 。