replace into表示插入替換資料,需求表中有primarykey,或者unique索引,如果資料庫已經存在資料,則用新資料替換,如果沒有資料效果則和insert into一樣;
replace也可以使用set語句,替換update,update在沒有比對記錄時什麼都不做,而replace在有重複記錄時更新,在沒有重複記錄時插入

replace into users set id = 123, name = ‘趙本山’, age = 50;
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);
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 。