程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> INSERT INTO .. ON DUPLICATE KEY更新多行記載

INSERT INTO .. ON DUPLICATE KEY更新多行記載

編輯:MySQL綜合教程

INSERT INTO .. ON DUPLICATE KEY更新多行記載。本站提示廣大學習愛好者:(INSERT INTO .. ON DUPLICATE KEY更新多行記載)文章只能為提供參考,不一定能成為您想要的結果。以下是INSERT INTO .. ON DUPLICATE KEY更新多行記載正文


假如在INSERT語句末尾指定了ON DUPLICATE KEY UPDATE,而且拔出行後會招致在一個UNIQUE索引或PRIMARY KEY中湧現反復值,則履行舊行UPDATE;假如不會招致獨一值列反復的成績,則拔出新行。例如,假如列a被界說為UNIQUE,而且包括值1,則以下兩個語句具有雷同的後果:


 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;

假如行作為新記載被拔出,則受影響行的值為1;假如原本的記載被更新,則受影響行的值為2。

     假如你想懂得更多關於INSERT INTO .. ON DUPLICATE KEY的功效解釋,詳見MySQL參考文檔:13.2.4. INSERT語法

     如今成績來了,假如INSERT多行記載, ON DUPLICATE KEY UPDATE前面字段的值怎樣指定?要曉得一條INSERT語句中只能有一個ON DUPLICATE KEY UPDATE,究竟他會更新一行記載,照樣更新一切須要更新的行。這個成績困擾了我良久了,其實應用VALUES()函數一切成績都處理了。

     舉個例子,字段a被界說為UNIQUE,而且原數據庫表table中已存在記載(2,2,9)和(3,2,1),假如拔出記載的a值與原有記載反復,則更新原有記載,不然拔出新行:


 INSERT INTO TABLE (a,b,c) VALUES
(1,2,3),
(2,5,7),
(3,3,6),
(4,8,2)
ON DUPLICATE KEY UPDATE b=VALUES(b);

以上SQL語句的履行,發明(2,5,7)中的a與原有記載(2,2,9)產生獨一值抵觸,則履行ON DUPLICATE KEY UPDATE,將原有記載(2,2,9)更新成(2,5,9),將(3,2,1)更新成(3,3,1),拔出新記載(1,2,3)和(4,8,2)

 留意:ON DUPLICATE KEY UPDATE只是MySQL的特有語法,其實不是SQL尺度語法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved