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

深入mysql "ON DUPLICATE KEY UPDATE" 語(yǔ)法的分析

 更新時(shí)間:2013年06月29日 10:49:33   作者:  
本篇文章是對(duì)mysql "ON DUPLICATE KEY UPDATE"語(yǔ)法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
mysql "ON DUPLICATE KEY UPDATE" 語(yǔ)法
如果在INSERT語(yǔ)句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后會(huì)導(dǎo)致在一個(gè)UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則在出現(xiàn)重復(fù)值的行執(zhí)行UPDATE;如果不會(huì)導(dǎo)致唯一值列重復(fù)的問題,則插入新行。
例如,如果列 a 為 主鍵 或 擁有UNIQUE索引,并且包含值1,則以下兩個(gè)語(yǔ)句具有相同的效果:
復(fù)制代碼 代碼如下:

INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE TABLE SET c=c+1 WHERE a=1;

如果行作為新記錄被插入,則受影響行的值顯示1;如果原有的記錄被更新,則受影響行的值顯示2。
這個(gè)語(yǔ)法還可以這樣用:
如果INSERT多行記錄(假設(shè) a 為主鍵或 a 是一個(gè) UNIQUE索引列):
復(fù)制代碼 代碼如下:

INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;

執(zhí)行后, c 的值會(huì)變?yōu)?4 (第二條與第一條重復(fù), c 在原值上+1).
復(fù)制代碼 代碼如下:

INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c);

執(zhí)行后, c 的值會(huì)變?yōu)?7 (第二條與第一條重復(fù), c 在直接取重復(fù)的值7).
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有語(yǔ)法,并不是SQL標(biāo)準(zhǔn)語(yǔ)法!
這個(gè)語(yǔ)法和適合用在需要 判斷記錄是否存在,不存在則插入存在則更新的場(chǎng)景.

INSERT INTO .. ON DUPLICATE KEY更新多行記錄
如果在INSERT語(yǔ)句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后會(huì)導(dǎo)致在一個(gè)UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則執(zhí)行舊行UPDATE;如果不會(huì)導(dǎo)致唯一值列重復(fù)的問題,則插入新行。例如,如果列a被定義為UNIQUE,并且包含值1,則以下兩個(gè)語(yǔ)句具有相同的效果:
復(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的功能說(shuō)明,詳見MySQL參考文檔:13.2.4. INSERT語(yǔ)法

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

舉個(gè)例子,字段a被定義為UNIQUE,并且原數(shù)據(jù)庫(kù)表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語(yǔ)句的執(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的特有語(yǔ)法,并不是SQL標(biāo)準(zhǔn)語(yǔ)法!

相關(guān)文章

  • mysql 讀寫分離(實(shí)戰(zhàn)篇)

    mysql 讀寫分離(實(shí)戰(zhàn)篇)

    MySQL Proxy最強(qiáng)大的一項(xiàng)功能是實(shí)現(xiàn)“讀寫分離(Read/Write Splitting)”。
    2009-04-04
  • Linux下徹底卸載mysql詳解

    Linux下徹底卸載mysql詳解

    如何在Linux下徹底的卸載MySQL數(shù)據(jù)庫(kù)呢? 下面這篇文章就給大家總結(jié)、整理了一下在Linux平臺(tái)下徹底卸載MySQL的方法。 文中通過(guò)圖文及示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)很有幫助,下面有需要的朋友們來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份

    Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份

    這篇文章主要介紹了Mysql如何在linux中實(shí)現(xiàn)定時(shí)備份,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • MySQL中l(wèi)imit對(duì)查詢語(yǔ)句性能的影響

    MySQL中l(wèi)imit對(duì)查詢語(yǔ)句性能的影響

    我們知道,當(dāng)limit offset rows中的offset很大時(shí),會(huì)出現(xiàn)效率問題,那么如果提高limit的執(zhí)行效率呢
    2021-09-09
  • MySQL高效可靠處理持久化數(shù)據(jù)的教程指南

    MySQL高效可靠處理持久化數(shù)據(jù)的教程指南

    這篇文章主要給大家詳細(xì)介紹了 MySQL 如何高效可靠處理持久化數(shù)據(jù),文中有詳細(xì)的流程步驟和代碼示例,對(duì)我們的學(xué)習(xí)有一定的幫助,需要的朋友可以參考下
    2023-07-07
  • 基于Redo Log和Undo Log的MySQL崩潰恢復(fù)解析

    基于Redo Log和Undo Log的MySQL崩潰恢復(fù)解析

    這篇文章主要介紹了基于Redo Log和Undo Log的MySQL崩潰恢復(fù)流程,點(diǎn)進(jìn)來(lái)的小伙伴不要錯(cuò)過(guò)奧
    2021-08-08
  • mysql數(shù)據(jù)庫(kù)亂碼之保存越南文亂碼解決方法

    mysql數(shù)據(jù)庫(kù)亂碼之保存越南文亂碼解決方法

    做一個(gè)包含越南文的網(wǎng)站,用戶說(shuō)在保存包含越南文的文章時(shí),MSYQL亂碼了,看下面的解決方法
    2013-12-12
  • MySQL索引失效十種場(chǎng)景與優(yōu)化方案

    MySQL索引失效十種場(chǎng)景與優(yōu)化方案

    這篇文章主要介紹了MySQL索引失效十種場(chǎng)景與優(yōu)化方案,文中有詳細(xì)的代碼示例供參考閱讀,感興趣的朋友可以看一下
    2023-05-05
  • MySQL多實(shí)例的配置應(yīng)用實(shí)例場(chǎng)景

    MySQL多實(shí)例的配置應(yīng)用實(shí)例場(chǎng)景

    在一臺(tái)服務(wù)器上,運(yùn)行多個(gè)數(shù)據(jù)庫(kù)服務(wù),這些服務(wù)進(jìn)程通過(guò)不同的socket監(jiān)聽不同的服務(wù)端口來(lái)提供各自的服務(wù),這篇文章主要介紹了MySQL多實(shí)例的配置場(chǎng)景分析,需要的朋友可以參考下
    2021-12-12
  • windows 10 下mysql-8.0.17-winx64的安裝方法圖解

    windows 10 下mysql-8.0.17-winx64的安裝方法圖解

    這篇文章主要介紹了windows 10 mysql-8.0.17-winx64的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論