MySQL 一條語句實現若記錄存在則更新,不存在則插入
問題產生
博主相信很多人在開發的時候難免會出現需要先判斷某個記錄是否存在,存在則更新,不存在則插入新記錄的情況(如在填寫報名表的時候有用戶需要修改信息等)。通常的做法是先使用 DELETE
語句先刪除一下再使用 INSERT INTO
語句插入,這樣做顯然效率會比較低。
解決辦法
MySQL 爲我們提供了一個新的途徑可以方便地實現僅執行一條 SQL 語句達成這個操,那就是 REPLACE INTO
語句。
使用方法
語句格式:
REPLACE INTO 表名(列名1, 列名2, ..., 列名n) VALUES (值1, 值2, ..., 值n);
例如:
REPLACE INTO students (StuName, Stuid, Class) VALUES ('張三', '123456789', '1234567');
語句原理
REPLACE INTO
語句要求被插入的表需要有已經定義的主鍵,該語句通過對主鍵進行檢索判斷記錄是否存在,若記錄存在,則對非主鍵屬性進行更新操作;若記錄不存在,則插入一條新記錄。
受影響的行數
- 當相同主鍵記錄存在,且欲更新的數據與已存在的數據完全相同時(即此時什麼都不做),受影響的行數爲
1
。 - 當相同主鍵記錄存在,且欲更新的數據與已存在的數據不完全相同時(即此時會更新數據),受影響的行數爲
2
。 - 當相同主鍵記錄不存在時,將插入一條新的記錄,受影響的行數爲
1
。