目前網(wǎng)上有三種方法碧查,暫時只嘗試了其中的一種
第一種
- 利用關(guān)鍵字:REPLACE
注:(1)我們在使用數(shù)據(jù)庫時可能會經(jīng)常遇到這種情況。如果一個表在一個字段上建立了唯一索引,當(dāng)我們再向這個表中使用已經(jīng)存在的鍵值insert一條記錄忠售,那將會拋出一個主鍵沖突的錯誤传惠。當(dāng)然,我們可能想用新記錄的值來覆蓋原來的記錄值稻扬。如果使用傳統(tǒng)的做法卦方,必須先使用DELETE語句刪除原先的記錄,然后再使用 INSERTinsert新的記錄泰佳。而在MySQL中為我們提供了一種新的解決方案盼砍,這就是REPLACE語句。使用REPLACEinsert一條記錄時逝她,如果不重復(fù)浇坐,REPLACE就和INSERT的功能一樣,如果有重復(fù)記錄黔宛,REPLACE就使用新記錄的值來替換原來的記錄值近刘。
(2)使用REPLACE的最大好處就是可以將DELETE和INSERT合二為一,形成一個原子操作臀晃。這樣就可以不必考慮在同時使用DELETE和INSERT時添加事務(wù)等復(fù)雜操作了
(3)在執(zhí)行REPLACE后觉渴,系統(tǒng)返回了所影響的行數(shù),如果返回1徽惋,說明在表中并沒有重復(fù)的記錄案淋,如果返回2,說明有一條重復(fù)記錄险绘,系統(tǒng)自動先調(diào)用了 DELETE刪除這條記錄踢京,然后再記錄用INSERT來insert這條記錄。如果返回的值大于2宦棺,那說明有多個唯一索引瓣距,有多條記錄被刪除和insert。 - REPLACE的語法和INSERT非常的相似渺氧,如下面的REPLACE語句是insert或更新一條記錄旨涝。
示例:
replace into rap_order values(4,112,21,'A01011101',234);
replace into rap_order values(1,112,21,'A01011101',234);
replace into rap_order values(5,115,21,'A01011101',234),(5,114,22,'A01011101',234);
#注:replace 同時向rpa_order 中into多條記錄,在添加的過程中最后面的重復(fù)的記錄直接將前面的記錄更新
第二種
使用insert ... on duplicate key update...
eg:
INSERT INTO shebao_collection(customer_code,customer_name) VALUES('1001','hw') ON DUPLICATE KEY UPDATE numbers = 5
- 注:
1. 重復(fù)的字段必須是唯一的侣背,主鍵或者唯一索引白华,上表中customer_code是唯一索引
2. 后面的update后面直接寫字段名即可,不需要寫values()贩耐、where 條件等
3. 非常適合只更新表中部分信息弧腥,同事保留沒有修改過的舊有信息