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

MySQL中ON DUPLICATE key update的使用

 更新時(shí)間:2023年05月24日 15:38:51   作者:辰兮ing  
本文主要介紹了MySQL中ON DUPLICATE key update的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、主鍵索引、唯一索引和普通索引的關(guān)系

主鍵索引
在數(shù)據(jù)庫中定義一個(gè)主鍵將自動(dòng)創(chuàng)建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個(gè)值是唯一的。當(dāng)在查詢中使用主鍵索引時(shí),它還允許快速訪問數(shù)據(jù)。主鍵索引不能為空。每個(gè)表只能有一個(gè)主鍵

唯一索引
不允許兩行具有相同的索引值。但可以都為NULL。 如果現(xiàn)有數(shù)據(jù)中存在重復(fù)的鍵值,則數(shù)據(jù)庫不允許將新創(chuàng)建的唯一索引與表一起保存。當(dāng)新數(shù)據(jù)和表中的鍵值重復(fù)時(shí),數(shù)據(jù)庫會(huì)拒絕接受此數(shù)據(jù)。每個(gè)表可以有多個(gè)唯一索引

普通索引
一般的索引結(jié)構(gòu),可以在條件刪選時(shí)加快查詢效率,索引字段的值可以重復(fù),可以為空值

二、實(shí)戰(zhàn)操作

1.ON DUPLICATE key update使用介紹:

有時(shí)候由于業(yè)務(wù)需求,可能需要先去根據(jù)某一字段值查詢數(shù)據(jù)庫中是否有記錄,有則更新,沒有則插入。這個(gè)時(shí)候就可以用到ON DUPLICATE key update這個(gè)sql語句了。

2.ON DUPLICATE key update測試樣例:

首先創(chuàng)一張簡單的表:

 增加以下數(shù)據(jù):

數(shù)據(jù)包含主鍵(id):

insert into user (id,username,userpwd,num) values (1,"testName","testPwd",10)
ON DUPLICATE KEY UPDATE
username = VALUES(username),
userpwd = VALUES(userpwd)

可以看到是根據(jù)主鍵來判斷,如果主鍵重復(fù)則執(zhí)行update。

加上username為唯一索引之后:

 再次執(zhí)行

insert into user (id,username,userpwd,num) values (1,"testName2","testPwd2",10)
ON DUPLICATE KEY UPDATE
username = VALUES(username),
userpwd = VALUES(userpwd)

可以看到還是根據(jù)id來進(jìn)行判斷,如果主鍵重復(fù)則執(zhí)行update。 

測試沒有id時(shí):

insert into user (username,userpwd,num) values ("testName2","testPwd3",10)
ON DUPLICATE KEY UPDATE
username = VALUES(username),
userpwd = VALUES(userpwd)

可以看到,此時(shí)是根據(jù)唯一索引來進(jìn)行判斷 ,如果唯一索引重復(fù)則執(zhí)行update。

說明優(yōu)先級:主鍵>唯一索引

此時(shí)測試沒有主鍵和唯一索引重復(fù)時(shí)的情況:

insert into user (username,userpwd,num) values ("testName4","testPwd4",10)
ON DUPLICATE KEY UPDATE
username = VALUES(username),
userpwd = VALUES(userpwd)

 可以發(fā)現(xiàn),此時(shí)是新增一條數(shù)據(jù),說明如果主鍵和唯一索引都不重復(fù)的情況執(zhí)行insert。

三、總結(jié)

ON DUPLICATE key update是根據(jù)索引字段是否重復(fù)來判斷是否執(zhí)行,如果重復(fù)則執(zhí)行update,否則則執(zhí)行insert。

優(yōu)先級主鍵>唯一索引

  • 當(dāng)主鍵重復(fù)時(shí)則執(zhí)行update
  • 當(dāng)主鍵不重復(fù),唯一索引重復(fù)時(shí)也執(zhí)行update
  • 當(dāng)主鍵和唯一索引值都不重復(fù)才執(zhí)行insert

PS:特殊情況,當(dāng)主鍵重復(fù)執(zhí)行update時(shí),如果此時(shí)唯一索引字段與其他字段也重復(fù)則會(huì)報(bào)錯(cuò)

到此這篇關(guān)于MySQL中ON DUPLICATE key update的使用的文章就介紹到這了,更多相關(guān)MySQL ON DUPLICATE key update內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談mysql 針對單張表的備份與還原

    淺談mysql 針對單張表的備份與還原

    下面小編就為大家?guī)硪黄獪\談mysql 針對單張表的備份與還原。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Windows中MySQL root用戶忘記密碼解決方案

    Windows中MySQL root用戶忘記密碼解決方案

    在實(shí)際應(yīng)用中,經(jīng)常會(huì)出現(xiàn)忘記mysql管理員用戶root的密碼的情況出現(xiàn),那么我們?nèi)绾蝸碓O(shè)置一個(gè)新密碼從而登錄數(shù)據(jù)庫呢,下面我們來探討下
    2014-07-07
  • 關(guān)于MyISAM和InnoDB對比分析

    關(guān)于MyISAM和InnoDB對比分析

    這篇文章主要介紹了關(guān)于MyISAM和InnoDB對比分析,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Mysql中如何刪除某個(gè)字段的最后四個(gè)字符

    Mysql中如何刪除某個(gè)字段的最后四個(gè)字符

    這篇文章主要介紹了Mysql中如何刪除某個(gè)字段的最后四個(gè)字符,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • MySQL?INSERT語句實(shí)現(xiàn)當(dāng)記錄不存在時(shí)插入的幾種方法

    MySQL?INSERT語句實(shí)現(xiàn)當(dāng)記錄不存在時(shí)插入的幾種方法

    MySQL的INSERT語句是用于向數(shù)據(jù)庫表中插入新記錄的關(guān)鍵命令,下面這篇文章主要介紹了MySQL?INSERT語句實(shí)現(xiàn)當(dāng)記錄不存在時(shí)插入的幾種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • MySQL中如何重建表

    MySQL中如何重建表

    這篇文章主要介紹了MySQL中如何重建表問題。具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 教你如何通過日志文件恢復(fù)MySQL數(shù)據(jù)

    教你如何通過日志文件恢復(fù)MySQL數(shù)據(jù)

    Binlog日志是二進(jìn)制日志文件,有兩個(gè)作用,一個(gè)是增量備份,另一個(gè)是主從復(fù)制,即主節(jié)點(diǎn)維護(hù)一個(gè)binlog日志文件,從節(jié)點(diǎn)從binlog中同步數(shù)據(jù),也可以通過binlog日志來恢復(fù)數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于如何通過日志文件恢復(fù)MySQL數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • MYSQL日志與備份還原問題詳解

    MYSQL日志與備份還原問題詳解

    這篇文章主要為大家詳細(xì)介紹了MYSQL日志與備份還原問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • MySQL?中的?SQL_MODE?設(shè)置方法ANSI_QUOTES?選項(xiàng)解析與應(yīng)用小結(jié)

    MySQL?中的?SQL_MODE?設(shè)置方法ANSI_QUOTES?選項(xiàng)解析與應(yīng)用小結(jié)

    sql_mode是?MySQL?中的一個(gè)系統(tǒng)變量,用于控制?SQL?語句的解析和執(zhí)行方式,它由多個(gè)選項(xiàng)組成,每個(gè)選項(xiàng)都可以獨(dú)立設(shè)置,以滿足不同的應(yīng)用場景需求,這篇文章主要介紹了MySQL?中的?SQL_MODE?設(shè)置:ANSI_QUOTES?選項(xiàng)解析與應(yīng)用
    2024-12-12
  • mysql tmp_table_size和max_heap_table_size大小配置

    mysql tmp_table_size和max_heap_table_size大小配置

    這篇文章主要介紹了mysql tmp_table_size和max_heap_table_size大小配置,需要的朋友可以參考下
    2016-05-05

最新評論