1. 程式人生 > 其它 >Mysql 插入一條資料,存在就更新,不存在就插入

Mysql 插入一條資料,存在就更新,不存在就插入

技術標籤:JavaMysqlmysql資料庫sql

官方的解釋是使用:INSERT ... ON DUPLICATE KEY UPDATE語句

例子:

INSERT INTO t1 (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE t1 SET c=c+1 WHERE a=1;

沒試過這種方式

2、REPLACE

REPLACE INTO user (id,open_id,nick_name,gender) VALUES(456,"789456","張", 0);

使用該語句之後發現他刪掉了我其他的資料,很疑惑,檢視文件後發現:REPLACE INTO 如果存在 primary 或 unique 相同的記錄,則先刪除掉。再插入新記錄

示例:

這是我的資料結構:id為主鍵,open_id有唯一約束

我想要使用REPLACE來修改或新增一條資料,執行語句:REPLACE INTO user (id,open_id,nick_name,gender) VALUES(123,"a","張 - 哈哈", 0); 這條資料是存在的,所以它會把nick_name改為 張 - 哈哈

我們可以看到結果已經改變了,並且資料庫提示:Affected rows: 2,下面是改變後效果圖

上圖是正常的實現,下面來演示primary 或unique相同會出現的情況,我修改並執行以下sql語句

REPLACE INTO user (id,open_id,nick_name,gender) VALUES(1234,"a","張 - 哈哈", 0);

資料庫提示:Affected rows: 3

再檢視資料,我們發現id為123那條資料不見了,取而代之的是這條id為1234的資料

通過以上例項,正確的解釋了:REPLACE INTO 如果存在 primary 或 unique 相同的記錄,則先刪除掉。再插入新記錄

以此記錄