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

mysql中的limit 1 for update的鎖類型

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

mysql limit 1 for update的鎖類型

最近遇到一個業(yè)務(wù)問題,購物券號是預(yù)先產(chǎn)生的,然后進(jìn)行客戶ID的綁定,從SQL上來講基本上有兩種方式實(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)心方式一會出現(xiàn)問題;主要是擔(dān)心會因?yàn)椴l(fā)問題,導(dǎo)致選出來的行被其他線程所修改掉,因?yàn)橐恢睍X得第一種方式加的是行鎖,需要查出來繼續(xù)判斷一下code_type才能進(jìn)行更新。

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

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

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

主鍵查詢加行鎖

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

此時可以對其他行加讀鎖和寫鎖

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

鎖升級的情況

role_id為varchar類型,但是用int類型也能搜索出來,但是此時加的是表鎖

select * from t_user_role where role_id = 1111 for update;

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

此時下面的查詢都會卡住

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

如果對role_type加上一個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是通過索引實(shí)現(xiàn)行鎖,只有通過索引項(xiàng)查詢的時候,才會加行鎖,否則統(tǒng)一加的是表鎖。

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

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

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

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

上面這句測試了是錯誤的,MYSQL的UPDATE語句不能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é)

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

相關(guān)文章

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

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

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

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

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

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

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

    Mysql使用簡單教程(三)

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

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

    MySQL中刪除數(shù)據(jù)表是非常容易操作的, 但是你再進(jìn)行刪除表操作時要非常小心,因?yàn)閳?zhí)行刪除命令后所有數(shù)據(jù)都會消失,這篇文章主要介紹了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 獲取時間方式

    mysql 獲取時間方式

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

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

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

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

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

    解決MySQL存儲時間出現(xiàn)不一致的問題

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

最新評論

偏关县| 营口市| 太康县| 牙克石市| 曲靖市| 邢台市| 通化县| 洪泽县| 石门县| 莱阳市| 万安县| 泸溪县| 北海市| 平塘县| 顺昌县| 崇明县| 民丰县| 海口市| 项城市| 大宁县| 华坪县| 贵溪市| 澎湖县| 安乡县| 滦南县| 兴业县| 林甸县| 安顺市| 虎林市| 清新县| 岢岚县| 恩平市| 广西| 全州县| 阜平县| 开封市| 于田县| 菏泽市| 昭平县| 南投市| 朝阳县|