mysql插入時存在就更新

2021-09-30 05:59:09 字數 1817 閱讀 7433

經常遇到的乙個問題就是如果插入資料存在時,則執行更新語句,通常會先select,有就update,無則insert。

如何簡單的完成這個任務呢?

有時候可以用replace into,這時會先刪除原來的資料,再插入一條,需要注意的是,插入的資料必須能造成主鍵或唯一索引衝突,否則不會刪除舊資料。

如果在insert into後面指定了on duplicate key update,並且插入行後會導致在乙個unique索引或primary key**現重複值,則執行舊行update。例如,如果列a被定義為unique,並且包含值1,則以下兩個語句具有相同的效果:

mysql>insert into table (a,b,c) values (1,2,3)

->on duplicate key update c=c+1;

mysql>update table set c=c+1 where a=1;

如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。

注釋:如果列b也是唯一列,則insert與此update語句相當:

mysql>update table set c=c+1 where a=1 or b=2 limit 1;

如果a=1 or b=2與多個行向匹配,則只有乙個行被更新。通常,您應該盡量避免對帶有多個唯一關鍵字的表使用on duplicate key子句。

您可以在update子句中使用values(col_name)函式從insert...update語句的insert部分引用列值。換句話說,如果沒有發生重複關鍵字衝突,則update子句中的values(col_name)可以引用被插入的col_name

的值。本函式特別適用於多行插入。values()函式只在insert...update語句中有意義,其它時候會返回null。

示例:

mysql>insert into table (a,b,c) values (1,2,3),(4,5,6)

->on duplicate key update c=values(a)+values(b);

本語句與以下兩個語句作用相同:

mysql>insert into table (a,b,c) values (1,2,3)

->on duplicate key update c=3;

mysql>insert into table (a,b,c) values (4,5,6)

->on duplicate key update c=9;

當您使用on duplicate key update時,delayed選項被忽略。

如果需要更新自動增長的字段,可以使用last_insert_id函式。

insert into table (a,b,c) values (1,2,3)

on duplicate key update id=last_insert_id(id), c=3;

mysql,存在就更新,不存在就插入

mysql 當記錄不存在時插入,當記錄存在時更新 網上基本有三種解決方法。第一種 示例一 插入多條記錄 假設有乙個主鍵為 client id 的 clients 表,可以使用下面的語句 insert into clients client id,client name,client type sel...

mysql存在就更新,不存在就新增

insert into newest log operation action,operation,key value,bus key,content,user id,version,module,create time values action,operation,keyvalue,buskey...

Mysql 併發插入 存在不插入,存在更新操作

我們遇到挺多這樣的問題,當使用者併發提交資料,重複提交資料。導致資料重複,或者 mysql sql 報錯。幾種解決辦法,對應到幾種業務場景。這個應該是最常見的處理方式,是醉不安全的,因為一旦有併發其實完全防止不了,來看看偽 entity entity service findbyid 10 if n...