MySQL數據替換

1、REPLACE數據庫

它是SQL標準的一個MYSQL擴展。擴展

eg.     REPLACE INTO admin VALUES (7,'admin3',123,'管理員帳號',1,'');im

第一次執行,MySQL提示影響了一行由於以前記錄不存在,僅插入了一條新的記錄。數據

再執行數次,顯示仍是受影響一行(我的猜測,在數據不變的狀況下,REPLACE 替換了原先的數據,因此執行顯示,受影響行數仍是1)img

REPLACE INTO admin VALUES (7,'admin9',123,'管理員帳號',1,'')管理

修改部分數據後,再次執行。顯示受影響行數爲2。

由於REPLACE執行順序是,先刪除舊的數據,再從新插入一行新的數據,這樣,受影響行數就爲2了。

注意:REPLACE 不能用where 來指定更新記錄。

REPLACE INTO admin SET id=7,TrueName='管理員帳號9'

有一個比較叼的問題,就是若是隻指定了部分的欄目而使用REPLACE的話,REPLACE會當即刪除存在的行,而後從新插入該行,但僅存在id和TrueName值。

 

2、 INSERT INTO ...ON DUPLICATE KEY UPDATE

e.g:INSERT INTO admin VALUES (7,'admin2',123,'管理員帳號',1,'')
ON DUPLICATE KEY UPDATE id=7,UserName='admin',TrueName='管理員帳號2',AdminGroup=1;

第一次執行,顯示受影響行數爲1。很明顯,由於數據庫不存在,因此新插入了一行。

第二次執行,顯示受影響行數爲2,。能夠的知,若是數據已經存在,可是數據和須要修改的數據不一樣,因此執行了更新的操做,(具體步驟應該也是先刪除,再從新插入),這時候數據表裏面admin2,改成了admin,管理員帳號也變爲了管理員帳號2。

第三次執行,顯示受影響行數爲0。由於數據與要修改的數據相同,則不執行更新操做。

另外,INSERT INTO ...ON DUPLICATE KEY UPDATE的另一個好處是,若是隻列出了部分的數據,那麼只更新不一樣值得列。