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

mysql中的limit 1 for update的鎖類型

 更新時(shí)間:2023年08月29日 16:47:31   作者:luwei9233  
這篇文章主要介紹了mysql中的limit 1 for update的鎖類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mysql limit 1 for update的鎖類型

最近遇到一個(gè)業(yè)務(wù)問(wèn)題,購(gòu)物券號(hào)是預(yù)先產(chǎn)生的,然后進(jìn)行客戶ID的綁定,從SQL上來(lái)講基本上有兩種方式實(shí)現(xiàn)

方式一

begin;
select * from purchase_code where code_type = 0 limit 1 for update;
update purchase_code set code_type=1,user_id=123 where purchase_code_id = 1
commit

方式二

update purchase_code set code_type=1,user_id=123 where code_type=0 limit 1;

之前一直擔(dān)心方式一會(huì)出現(xiàn)問(wèn)題;主要是擔(dān)心會(huì)因?yàn)椴l(fā)問(wèn)題,導(dǎo)致選出來(lái)的行被其他線程所修改掉,因?yàn)橐恢睍?huì)覺得第一種方式加的是行鎖,需要查出來(lái)繼續(xù)判斷一下code_type才能進(jìn)行更新。

進(jìn)行測(cè)試了一下發(fā)現(xiàn)上面兩種方式加的都是表鎖。

因?yàn)槭裁丛蛏厦婕拥氖潜礞i呢?

經(jīng)過(guò)測(cè)試,mysql加鎖有這樣的特點(diǎn):

主鍵查詢加行鎖

begin;
select * from t_user_role where role_id = "1111" limit 1 for update ;

此時(shí)可以對(duì)其他行加讀鎖和寫鎖

select * from t_user_role where role_id = 'operator';
select * from t_user_role where role_id = 'operator' for update

鎖升級(jí)的情況

role_id為varchar類型,但是用int類型也能搜索出來(lái),但是此時(shí)加的是表鎖

select * from t_user_role where role_id = 1111 for update;

當(dāng)按非主鍵查詢的時(shí)候,此時(shí)mysql加的是表鎖

此時(shí)下面的查詢都會(huì)卡住

select * from t_user_role where role_type = 2 limit 1 for update ;
select * from t_user_role where role_id = 'operator' for update;

如果對(duì)role_type加上一個(gè)key索引,情況就變得有意思

除了最后一次查詢被卡住外,其他查詢?nèi)磕芊祷?/p>

select * from t_user_role where role_type = 2 limit 1 for update ;
select * from t_user_role where role_id = 'operator' for update;
select * from t_user_role where role_id = '2222' for update;
select * from t_user_role where role_type = 1 limit 1 for update ;

研究innodb的鎖機(jī)制發(fā)現(xiàn)

innodb是通過(guò)索引實(shí)現(xiàn)行鎖,只有通過(guò)索引項(xiàng)查詢的時(shí)候,才會(huì)加行鎖,否則統(tǒng)一加的是表鎖。

因此role_type上加索引之后,鎖加在了role_type的索引上,從而上面其他三能順利獲得鎖,但是此時(shí)已然無(wú)法獲取表鎖

mysql update limit 批量修改數(shù)據(jù)

1、想要實(shí)現(xiàn)修改數(shù)據(jù)庫(kù)的5條之后的數(shù)據(jù)

update demo set flag='1' where user_id=1 limit 5,100;

上面這句測(cè)試了是錯(cuò)誤的,MYSQL的UPDATE語(yǔ)句不能update限制從第N(5)條之后開始更新N(100)條。

2、建議方法

可以改變一下思維方式

  • 1)先將全部flag修改為flag=1; 
  • 2)再按自己需求修改前N條,或者后N條數(shù)據(jù)falg=0;

①、

update demo set flag='1'? where user_id = 1;

②、

修改數(shù)據(jù)前5條:

update demo set flag='1' where user_id=1 and?flag='0'?limit 5;

修改數(shù)據(jù)后5條:

update demo set flag='1' where user_id=1 and?flag='0' order by id desc?limit 5;

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 查看連接mysql的IP地址的實(shí)例方法

    查看連接mysql的IP地址的實(shí)例方法

    在本篇文章里小編給大家分享的是一篇關(guān)于查看連接mysql的IP地址的實(shí)例方法,有需要的朋友們可以參考下。
    2020-10-10
  • 增刪改查sql語(yǔ)法基礎(chǔ)教程

    增刪改查sql語(yǔ)法基礎(chǔ)教程

    為了準(zhǔn)備面試,整理了一些SQL基本語(yǔ)句和自己的理解,作為備份,下面這篇文章主要給大家介紹了關(guān)于增刪改查sql語(yǔ)法基礎(chǔ)教程的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • SQL group by去重復(fù)且按照其他字段排序的操作

    SQL group by去重復(fù)且按照其他字段排序的操作

    這篇文章主要介紹了SQL group by去重復(fù)且按照其他字段排序的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Mysql使用簡(jiǎn)單教程(三)

    Mysql使用簡(jiǎn)單教程(三)

    這篇文章主要介紹了Mysql使用簡(jiǎn)單教程(三) 的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • MySQL刪除數(shù)據(jù)用法及區(qū)別詳解(DELETE、TRUNCATE?和?DROP)

    MySQL刪除數(shù)據(jù)用法及區(qū)別詳解(DELETE、TRUNCATE?和?DROP)

    MySQL中刪除數(shù)據(jù)表是非常容易操作的, 但是你再進(jìn)行刪除表操作時(shí)要非常小心,因?yàn)閳?zhí)行刪除命令后所有數(shù)據(jù)都會(huì)消失,這篇文章主要介紹了MySQL刪除數(shù)據(jù)用法及區(qū)別(DELETE、TRUNCATE?和?DROP)的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • MySQL 事務(wù)概念與用法深入詳解

    MySQL 事務(wù)概念與用法深入詳解

    這篇文章主要介紹了MySQL 事務(wù)概念與用法,結(jié)合實(shí)例形式深入分析了MySQL 事務(wù)基本概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • mysql 獲取時(shí)間方式

    mysql 獲取時(shí)間方式

    這篇文章主要介紹了mysql 獲取時(shí)間方式,獲取指定時(shí)間,獲取當(dāng)前時(shí)間等相關(guān)內(nèi)容,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2022-03-03
  • 詳解MySQL子查詢(嵌套查詢)、聯(lián)結(jié)表、組合查詢

    詳解MySQL子查詢(嵌套查詢)、聯(lián)結(jié)表、組合查詢

    這篇文章主要介紹了MySQL子查詢(嵌套查詢)、聯(lián)結(jié)表、組合查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 淺談一下MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別

    淺談一下MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別

    這篇文章主要介紹了MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別,存儲(chǔ)引擎是MySQL中特有的一個(gè)術(shù)語(yǔ),其它數(shù)據(jù)庫(kù)中沒有,實(shí)際上存儲(chǔ)引擎是一個(gè)表存儲(chǔ)/組織數(shù)據(jù)的方式,今天就跟小編來(lái)看看MyISAM和InnoDB存儲(chǔ)引擎的區(qū)別,需要的朋友可以參考下
    2023-04-04
  • 解決MySQL存儲(chǔ)時(shí)間出現(xiàn)不一致的問(wèn)題

    解決MySQL存儲(chǔ)時(shí)間出現(xiàn)不一致的問(wèn)題

    這篇文章主要介紹了解決MySQL存儲(chǔ)時(shí)間出現(xiàn)不一致的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04

最新評(píng)論

北宁市| 舟山市| 辛集市| 奉化市| 济阳县| 凤冈县| 磴口县| 甘南县| 若羌县| 子长县| 泾源县| 信阳市| 泌阳县| 云阳县| 扶余县| 兴国县| 贡嘎县| 囊谦县| 黎川县| 元朗区| 盐亭县| 进贤县| 枞阳县| 万源市| 邛崃市| 富平县| 班玛县| 兴化市| 潞西市| 女性| 八宿县| 开化县| 萨嘎县| 贡山| 通城县| 云浮市| 曲靖市| 玉溪市| 元氏县| 都安| 博湖县|