欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql中Insert into xxx on duplicate key update問題

 更新時間:2012年08月10日 14:25:24   作者:  
在看代碼的過程中碰到了這一用法,不太理解,google了一下。它的意義其實是如果在insert語句末尾制定了on duplicate key update語句的話,則當插入行會導(dǎo)致一個unique索引或者primary key中出現(xiàn)重復(fù)值,則執(zhí)行update中的語句,否則才插入新行
例如,如果列a被定義為unique,并且值為1,則下列語句有同樣的效果,也就是說一旦出入的記錄中存在a=1的情況,直接更新c = c + 1,而不執(zhí)行c = 3的操作。
復(fù)制代碼 代碼如下:

insert into table(a, b, c) values (1, 2, 3) on duplicate key
update c = c + 1;1 update table set c = c + 1 where a = 1;

另外值得一提的是,這個語句知識mysql中,而標準sql語句中是沒有的。

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

如果在INSERT語句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后會導(dǎo)致在一個UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則執(zhí)行舊行UPDATE;如果不會導(dǎo)致唯一值列重復(fù)的問題,則插入新行。例如,如果列a被定義為UNIQUE,并且包含值1,則以下兩個語句具有相同的效果:

復(fù)制代碼 代碼如下:

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。

如果你想了解更多關(guān)于INSERT INTO .. ON DUPLICATE KEY的功能說明,詳見MySQL參考文檔:13.2.4. INSERT語法

現(xiàn)在問題來了,如果INSERT多行記錄, ON DUPLICATE KEY UPDATE后面字段的值怎么指定?要知道一條INSERT語句中只能有一個ON DUPLICATE KEY UPDATE,到底他會更新一行記錄,還是更新所有需要更新的行。這個問題困擾了我很久了,其實使用VALUES()函數(shù)一切問題都解決了。

舉個例子,字段a被定義為UNIQUE,并且原數(shù)據(jù)庫表table中已存在記錄(2,2,9)和(3,2,1),如果插入記錄的a值與原有記錄重復(fù),則更新原有記錄,否則插入新行:

復(fù)制代碼 代碼如下:

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語句的執(zhí)行,發(fā)現(xiàn)(2,5,7)中的a與原有記錄(2,2,9)發(fā)生唯一值沖突,則執(zhí)行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標準語法!

相關(guān)文章

  • mysql中profile的使用方法教程

    mysql中profile的使用方法教程

    這篇文章主要給大家介紹了關(guān)于mysql中profile的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2018-09-09
  • MySQL中int最大值深入講解

    MySQL中int最大值深入講解

    這篇文章主要給大家介紹了關(guān)于MySQL中int最大值的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧
    2019-02-02
  • MySQL解決SQL注入的另類方法詳解

    MySQL解決SQL注入的另類方法詳解

    這篇文章主要介紹了MySQL解決SQL注入的另類方法,結(jié)合實例形式列舉分析了幾種防止SQL注入的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-04-04
  • MySQL數(shù)據(jù)歸檔小工具mysql_archiver詳解

    MySQL數(shù)據(jù)歸檔小工具mysql_archiver詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)歸檔小工具mysql_archiver詳解,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • MySQL數(shù)據(jù)庫定時任務(wù)舉例講解

    MySQL數(shù)據(jù)庫定時任務(wù)舉例講解

    最近項目里面的后臺需要用到定時任務(wù),而MySQL從5.0開始自帶了定時事件操作,所以學(xué)習下并做下記錄,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫定時任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • MySQL隨機查詢記錄的效率測試分析

    MySQL隨機查詢記錄的效率測試分析

    以下的文章主要介紹的是MySQL使用rand 隨機查詢記錄效率測試,我們大家一直都以為MySQL數(shù)據(jù)庫隨機查詢的幾條數(shù)據(jù),就用以下的東東,其實其實際效率是十分低的
    2011-06-06
  • 圖文詳解Mysql中如何查看Sql語句的執(zhí)行時間

    圖文詳解Mysql中如何查看Sql語句的執(zhí)行時間

    寫程序的人往往需要分析所寫的SQL語句是否已經(jīng)優(yōu)化過了,服務(wù)器的響應(yīng)時間有多快,所以下面這篇文章主要給大家介紹了關(guān)于Mysql中如何查看Sql語句的執(zhí)行時間的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • MySQL 中查找含有目標字段的表的方法

    MySQL 中查找含有目標字段的表的方法

    這篇文章主要介紹了MySQL 中查找含有目標字段的表的方法,即查找某個字段在哪個表中,這在一些場景中非常有用,需要的朋友可以參考下
    2015-06-06
  • mysql事務(wù)和隔離級別底層原理淺析

    mysql事務(wù)和隔離級別底層原理淺析

    大家好,本篇文章主要講的是mysql事務(wù)和隔離級別底層原理淺析,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2021-12-12
  • Mysql查詢所有表和字段信息的方法

    Mysql查詢所有表和字段信息的方法

    這篇文章主要介紹了Mysql查詢所有表和字段信息,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04

最新評論