MySQL 記錄不存在插入 和 存在則更新

2021-08-21 02:34:29 字數 2118 閱讀 8215

想要插入一條資料,要避免重複插入,又不想折騰兩回資料庫連線操作,可以參考如下辦法

語法: 此處 aa,bb,cc 為要插入的 a,b,c 列的值

insert

into table1 (a,b,c) select aa,bb,cc from dual where

notexists (select

cfrom

table1

where

a = 18

and b =133)

示例: 

插入 situation_alert ,situation_id= 18 ,alert_id=133,create_time=now() ,當該條記錄不存在則插入。

insert

into situation_alert (situation_id,alert_id,create_time) select

18,133,now() from dual where

notexists (select

alert_id

from

situation_alert

where

situation_id = 18

and alert_id =133);

插入一條資料,如果該資料存在則更新,如果不存在則插入

insert

into

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

on duplicate key

update c=c+1;

如果指定了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;

注意:update c=c+1;  沒有set 語句哦
如果行作為新記錄被插入,則受影響行的值為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;

insert ... select

insert ... on duplicate key update

insert ... on duplicate replace

親測有效; 

參考:

MySQL記錄存在則更新,不存在則插入

create table tb file authorize authorize id int 11 not null auto increment,str id int 11 default null comment 使用者標識 file id int 11 default null commen...

MySQL 當記錄不存在時插入,當記錄存在時更新

第一種 示例一 插入多條記錄 假設有乙個主鍵為 client id 的 clients 表,可以使用下面的語句 insert into clients client id client name client type select supplier id supplier name,adverti...

sql 存在更新,不存在插入

1 語法 if exists select from users where name 張三 print 1 else print 02 建表語句 create table dbo users id int not null identity 1,1 name varchar 50 null var...