中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MYSQL無重復插入數據更新語法的示例分析

發布時間:2021-10-13 15:28:08 來源:億速云 閱讀:157 作者:柒染 欄目:數據庫

MYSQL無重復插入數據更新語法的示例分析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。


 
如果你指定了ON DUPLICATE KEY UPDATE命令語句,那么在唯一索引或者主索引的作用下將不插入與記錄重復的內容,但同時會更新數據庫中的舊記錄。例如,字段a被聲明為唯一索引并且里面只包含有值為1的記錄,以下兩個語句會達到同樣的效果:
  www.2cto.com  
一、 INSERT INTO table ( a , b , c ) VALUES ( 1 , 2 , 3 ) 
   ON DUPLICATE KEY UPDATE c = c + 1 ;
 
二、 UPDATE table SET c = c + 1 WHERE a = 1 ;
受影響的是a=1的行,當插入時c的值加1。
如果字段b也是唯一的話,這個插入語句將和以下語句的效果一樣:
UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
如果a=1 OR b=2匹配了不止一行,也只是第一行被更新。一般地,如果表中有多個唯一索引的話,你應該避免在使用用ON DUPLICATE KEY子句。
 
你可以在插入更新語句 INSERT ... UPDATE 中使用 VALUES(字段名) 函數去關聯某一行記錄。也就是說, VALUES(字段名) 可以用在UPDATE語句中去更新某字段的值而不會出現重復鍵。這個函數在多行插入中尤其有用。但是函數 VALUES() 僅當用在 INSERT ... UPDATE 語句中才有意義,否則會返回NULL。例如:
 
INSERT INTO table ( a , b , c ) VALUES ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) 
ON DUPLICATE KEY UPDATE c = VALUES ( a ) + VALUES ( b ) ;
這個語句和下面兩個是同效果的:
  www.2cto.com  
INSERT INTO table ( a , b , c ) VALUES ( 1 , 2 , 3 ) 
ON DUPLICATE KEY UPDATE c = 3 ;
INSERT INTO table ( a , b , c ) VALUES ( 4 , 5 , 6 ) 
ON DUPLICATE KEY UPDATE c = 9 ;
如果表中包含有一個自動遞增字段AUTO_INCREMENT,并用 INSERT ... UPDATE插入一行,函數 LAST_INSERT_ID()會返回AUTO_INCREMENT的值,如果這個語句更新某一行, LAST_INSERT_ID() 就沒有意義了。但是,你可以通過用 LAST_INSERT_ID(expr)使它變得有意義,假如id字段是自動遞增欄的話,使 LAST_INSERT_ID() 對更新語句有意義的方法如下:
 
INSERT INTO table ( a , b , c ) VALUES ( 1 , 2 , 3 ) 
ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID ( id ) , c = 3 ;
如果你使用 ON DUPLICATE KEY UPDATE 語句的話,延遲執行選項 DELAYED 將被忽略。
 
插入記錄
 
Insert into table_name (field_name1, field_name2, …) values (value1, value2, …);
 
Insert into values (value1, value2, …);   //這種形式只能應用于值的順序與字段順序匹配的情況(可以通過調用describe命令來決定字段順序)。
包含引用標志的值需要再引號’前面加上反斜線                   //轉義字符
注意:into 關鍵字是可選的
 
也可以同時插入多個值,用逗號分開
Eg:insert table_name values (value1, value2, …), (value3, value4, …);
還可以不使用insert… values格式,而使用類似update語句,它使用set子句分別為每一列設置值。
Insert into table_name set field_name1 = value1, field_name2 = value2,…;
使用default值
Create table table_name (field_name1 type default def_value not null,…);
Insert table_name values (default,…);   //default關鍵字只在4.0.3以及更高版本才支持
 
使用AUTOINCREMENT字段
自動產生下一個序號,該字段必須被設置為主鍵
使用UNIQUE字段
使用IGNORE關鍵字或者ON DUPLICATE KEY UPDATE子句跳過INSERT、中斷操作或者更新舊記錄為新值。  www.2cto.com  
INSERT IGNORE INTO TABLE_NAME (UNIQUE_FIELD, …) VALUES (REPEAT, …);
如果重復記錄,則不會報告錯誤,也不會更新記錄,數據庫中的數據保持不變。
ON DUPLICATE KEY UPDATE和REPLACE區別:前者只把已命名的字段更新為新值,后者刪除了舊記錄,然后用新值完全替換。
 
Eg:insert into Menu value (null, ‘MySQL’, ‘www.mysql.com’) on duplicate key update label=’MS SQL’, url=’www.microsoft.com’;
在這種情況下,如果MySQL發現表中已經包含具有相同唯一鍵的記錄,則會自動更新舊的記錄為ON DUPLICATE KEY UPDATE從句中指定的新值。
當有很多insert語句需要被順序執行時,IGNORE關鍵字就使操作變得很方便。這可以保證不管拿一個INSERT包含了重復值,MySQL都會跳過而不放棄全部操作。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌兰浩特市| 泰州市| 辛集市| 漳州市| 垦利县| 海晏县| 铜梁县| 霞浦县| 同江市| 永川市| 克东县| 元朗区| 大庆市| 汝城县| 民和| 申扎县| 仙游县| 临潭县| 浑源县| 青川县| 施甸县| 民和| 三亚市| 白山市| 祁阳县| 贵港市| 黄梅县| 珠海市| 杨浦区| 家居| 云龙县| 天峻县| 陆河县| 南平市| 九江县| 历史| 开阳县| 浙江省| 呼伦贝尔市| 石泉县| 金湖县|