最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql存在則修改不存在則新增的兩種實(shí)現(xiàn)方法實(shí)例

 更新時(shí)間:2022年09月13日 09:20:17   作者:barcke  
mysql語法支持如果數(shù)據(jù)存在則更新,不存在則插入,下面這篇文章主要給大家介紹了關(guān)于Mysql存在則修改不存在則新增的兩種實(shí)現(xiàn)方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

假設(shè)有一張demo表,主鍵為id,唯一索引是code

create table demo
(
	id int auto_increment,
	name int null,
	gender int null,
	age int null,
	code int null,
	constraint demo_pk
		primary key (id)
);

create unique index demo_code_uindex
	on demo (code);

方法一 replace into

replace into 會(huì)根據(jù)唯一索引或主鍵進(jìn)行判斷,如果存在則覆蓋寫入字段,如果不存在則新增。

此方法有坑,如果主鍵是自增的,且通過唯一索引來進(jìn)行操作時(shí),主鍵會(huì)變更,該方法底層是先進(jìn)性delete,在insert如果有子表

依賴的話不建議使用。

replace into 事例

REPLACE INTO demo(id, name, gender, age, code) VALUES (1,'1',1,1,1)

通過主鍵修改,此時(shí)沒有任何問題,id還是1

image

當(dāng)我們通過唯一索引code來更改。

REPLACE INTO demo(name, gender, age, code) VALUES ('1',1,1,1)

image

沒執(zhí)行一次 主鍵id都會(huì)自增。

方法二 on duplicate key

on duplicate key 如果遇到重復(fù)的唯一索引則會(huì)進(jìn)行update,否則進(jìn)行新增,沒有replcae的坑,不會(huì)先進(jìn)行delete 在進(jìn)行 insert

on duplicate key 事例:

INSERT INTO demo(name, gender, age, code)
VALUES ('1',
       1,
       2,
       2)
ON DUPLICATE KEY UPDATE name   = values(name),
                       gender = values(gender),
                       age    = values(age),
                       code   = if(values(code) = 1,values(code), code)

image

無論執(zhí)行多少次,主鍵值都是不會(huì)變的。

但是此方法也有坑,如果表中不止一個(gè)唯一索引的話,在特定版本的mysql中容易產(chǎn)生dead lock(死鎖)

當(dāng)mysql執(zhí)行INSERT ON DUPLICATE KEY的 INSERT時(shí),存儲(chǔ)引擎會(huì)檢查插入的行是否會(huì)產(chǎn)生重復(fù)鍵錯(cuò)誤。如果是的話,它會(huì)將現(xiàn)有的

行返回給mysql,mysql會(huì)更新它并將其發(fā)送回存儲(chǔ)引擎。當(dāng)表具有多個(gè)唯一或主鍵時(shí),此語句對(duì)存儲(chǔ)引擎檢查密鑰的順序非常敏感。根據(jù)這個(gè)順序,

存儲(chǔ)引擎可以確定不同的行數(shù)據(jù)給到mysql,因此mysql可以更新不同的行。存儲(chǔ)引擎檢查key的順序不是確定性的。例如,InnoDB按照索引添加到

表的順序檢查鍵。

insert … on duplicate key 在執(zhí)行時(shí),innodb引擎會(huì)先判斷插入的行是否產(chǎn)生重復(fù)key錯(cuò)誤,如果存在,在對(duì)該現(xiàn)有的行加上S(共享鎖)鎖,如果返回該行數(shù)據(jù)給mysql,然后mysql執(zhí)行完duplicate后的update操作,然后對(duì)該記錄加上X(排他鎖),最后進(jìn)行update寫入。

如果有兩個(gè)事務(wù)并發(fā)的執(zhí)行同樣的語句,那么就會(huì)產(chǎn)生death lock

總結(jié)

到此這篇關(guān)于Mysql存在則修改不存在則新增的兩種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Mysql存在修改不存在新增內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql Innodb表空間卸載、遷移、裝載的使用方法

    mysql Innodb表空間卸載、遷移、裝載的使用方法

    從MySQL的Innodb特性中我們知道,Inndob的表空間有共享和獨(dú)享的特點(diǎn),如果是共享的。則默認(rèn)會(huì)把表空間存放在一個(gè)文件中(ibdata1),當(dāng)開啟獨(dú)享表空間參數(shù)Innodb_file_per_table時(shí),會(huì)為每個(gè)Innodb表創(chuàng)建一個(gè).ibd的文件。文章討論在獨(dú)享表空間卸載、裝載、遷移Innodb表的情況
    2013-11-11
  • MySQL去除字段里數(shù)字的示例代碼

    MySQL去除字段里數(shù)字的示例代碼

    本文主要介紹了MySQL去除字段里數(shù)字的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Ubuntu自啟動(dòng)Mysql的三種方式

    Ubuntu自啟動(dòng)Mysql的三種方式

    本文給大家介紹ubuntu自啟動(dòng)mysql的三種方式,一種方法通過執(zhí)行命令,也是最簡單的方法,第二種方法是使用sysv-rc-cont工具,第三種方法是使用chkconfig工具,關(guān)于以上三種方式的詳解請(qǐng)看下文
    2015-10-10
  • mysql導(dǎo)出指定數(shù)據(jù)或部份數(shù)據(jù)的方法

    mysql導(dǎo)出指定數(shù)據(jù)或部份數(shù)據(jù)的方法

    mysql雖然可以使用mysqldump來進(jìn)行數(shù)據(jù)的到處,可是在很多場合的需求都不一樣,比如我只要導(dǎo)出某個(gè)字段呢?只要導(dǎo)出某些我需要的數(shù)據(jù)呢?
    2014-03-03
  • Windows10 64位安裝MySQL5.6.35的圖文教程

    Windows10 64位安裝MySQL5.6.35的圖文教程

    這篇文章主要介紹了Windows10 64位安裝MySQL5.6.35的圖文教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • MySQL觸發(fā)器簡單用法示例

    MySQL觸發(fā)器簡單用法示例

    這篇文章主要介紹了MySQL觸發(fā)器簡單用法,結(jié)合實(shí)例形式分析了mysql觸發(fā)器的創(chuàng)建、執(zhí)行、查看、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • MySQL 自定義函數(shù)CREATE FUNCTION示例

    MySQL 自定義函數(shù)CREATE FUNCTION示例

    本節(jié)主要介紹了MySQL 自定義函數(shù)CREATE FUNCTION,下面是示例代碼,需要的朋友可以參考下
    2014-07-07
  • 在sql中對(duì)兩列數(shù)據(jù)進(jìn)行運(yùn)算作為新的列操作

    在sql中對(duì)兩列數(shù)據(jù)進(jìn)行運(yùn)算作為新的列操作

    這篇文章主要介紹了在sql中對(duì)兩列數(shù)據(jù)進(jìn)行運(yùn)算作為新的列操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 導(dǎo)致sql執(zhí)行速度慢的幾種情況盤點(diǎn)(生產(chǎn)環(huán)境踩過的坑)

    導(dǎo)致sql執(zhí)行速度慢的幾種情況盤點(diǎn)(生產(chǎn)環(huán)境踩過的坑)

    盤點(diǎn)分析MySQL執(zhí)行速度慢可以幫助我們進(jìn)行優(yōu)化MySQL數(shù)據(jù)庫的效率,這篇文章主要給大家盤點(diǎn)介紹了關(guān)于導(dǎo)致sql執(zhí)行速度慢的幾種情況,文中介紹的這些主要是生產(chǎn)環(huán)境踩過的坑,需要的朋友可以參考下
    2023-03-03
  • MySQL Daemon failed to start錯(cuò)誤解決辦法

    MySQL Daemon failed to start錯(cuò)誤解決辦法

    這篇文章主要介紹了MySQL Daemon failed to start錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評(píng)論

宜川县| 壤塘县| 曲周县| 和龙市| 锡林郭勒盟| 始兴县| 綦江县| 肇庆市| 富源县| 布尔津县| 宜兴市| 文成县| 玛曲县| 大新县| 新余市| 文水县| 西乡县| 德令哈市| 西安市| 正镶白旗| 云龙县| 鄂托克旗| 盈江县| 保靖县| 南和县| 徐州市| 漳州市| 谷城县| 靖安县| 沈丘县| 邹平县| 鄢陵县| 大埔县| 筠连县| 富民县| 绵阳市| 盐池县| 浦县| 玉林市| 城市| 海晏县|