1. 程式人生 > 實用技巧 >MySQL中特別實用的幾種SQL語句

MySQL中特別實用的幾種SQL語句

轉載自:

https://blog.csdn.net/qq_39390545/article/details/106690916

1.插入或替換

  如果我們想插入一條新記錄(INSERT),但如果記錄已經存在,就先刪除原記錄,再插入新記錄。

  此時,可以使用"REPLACE INTO"語句,這樣就不必先查詢,再決定是否先刪除再插入。

  "REPLACE INTO"語句是基於唯一索引或主鍵來判斷唯一(是否存在)的。

  注意事項:如下SQL所示,需要在username欄位上建立唯一索引(Unique),transId設定自增即可。 

REPLACE INTO last_transaction (transId,username,amount,trans_time,remark) 
   VALUES (
null, 'chenhaha', 30, '2020-06-11 20:00:20', '會員充值');

  因為主鍵transId自增, 此SQL沒有指定主鍵, 所以上面的sql根據唯一索引username進行判斷, 如果username="chenhaha"的資料不存在則建立, 否則先進行刪除原資料然後插入.

REPLACE INTO last_transaction (transId,username,amount,trans_time,remark) 
   VALUES (1, 'chenhaha', 30, '2020-06-11 20:00:20', '會員充值');

  上面SQL指定了主鍵值, 所以根據主鍵進行插入或者替換的操作

2.插入或更新

  如果我們希望插入一條新記錄(INSERT),但如果記錄已經存在,就更新該記錄,此時,可以使用"INSERT INTO ... ON DUPLICATE KEY UPDATE ..."語句

  注意事項:同上面的插入或替換,"INSERT INTO ... ON DUPLICATE KEY UPDATE ..."語句是基於唯一索引或主鍵來判斷唯一(是否存在)的.

INSERT INTO total_transaction (t_transId,username,total_amount,last_transTime,last_remark) 
   VALUES (null
, 'chenhaha', 30, '2020-06-11 20:00:20', '充會員') ON DUPLICATE KEY UPDATE total_amount=total_amount + 30, last_transTime='2020-06-11 20:00:20', last_remark ='充會員';

  此SQL中沒有指定主鍵, 所以根據唯一索引username來判斷username='chenhaha'的記錄是否存在, 不存在就建立VALUES (null, 'chenhaha', 30, '2020-06-11 20:00:20', '充會員') 的資料, 如果存在就根據username='chenhaha'進行更新, 更行的欄位和資料就是ON DUPLICATE KEY UPDATE 後面指定的

  如果指定了主鍵值, 則根據主鍵值進行插入或更新

3.插入或忽略

  如果我們希望插入一條新記錄(INSERT),但如果記錄已經存在,就啥事也不幹直接忽略,此時,可以使用INSERT IGNORE INTO ...語句

  注意事項:同上面的插入或替換,"INSERT IGNORE INTO ..."語句是基於唯一索引或主鍵來判斷唯一(是否存在)的.

INSERT IGNORE INTO users_info (id, username, sex, age ,balance, create_time) 
   VALUES (null, 'chenhaha', '', 12, 0, '2020-06-11 20:00:20');

  根據此SQL中的唯一索引username='chenhaha'的資料是否在, 不存在就插入, 存在就什麼也不幹