日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql for update 锁_MySql FOR UPDATE 锁的一点问题……

發(fā)布時(shí)間:2023/12/9 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql for update 锁_MySql FOR UPDATE 锁的一点问题…… 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題描述

假設(shè)一個(gè)情況,這里只是假設(shè),真實(shí)的情況可能不會(huì)這樣設(shè)計(jì),但是假如真的發(fā)生了....鐵老大有一張這樣的ticket表,用來(lái)存放北京到上海的票。

iduidstart_addrend_addrbook_time

11300009860上海北京13866660321

20上海北京

30上海北京

40上海北京

uid?不等于0?并且?book_time?不等于0,則表示已售出,不許再更改。年底了,大家開始搶了,當(dāng)某一個(gè)人開始搶的時(shí)候,鐵老大這樣做了,當(dāng)A開始搶的時(shí)候,從表中所有uid=0的記錄中隨機(jī)取出一條,然后修改當(dāng)前記錄的uid為A的uid,book_time為當(dāng)前時(shí)間。那么好了,這個(gè)時(shí)候并發(fā)產(chǎn)生了,10000個(gè)人同時(shí)搶最后剩下的10張票,有2個(gè)人A,B同時(shí)讀取了uid=0?and?id=2的記錄,然后A把uid修改為自己的,book_time修改timeA,系統(tǒng)通知A搶票成功?緊接著,B同樣修改了這條記錄為自己的,那么這個(gè)時(shí)候A的票就失效了。這里就考慮使用鎖機(jī)制了,如果在A讀取了這條記錄后,并把這條記錄加上寫鎖,那么別人就無(wú)法再讀取加鎖,也就不會(huì)修改多次了。

實(shí)驗(yàn)結(jié)果

實(shí)驗(yàn)了一下for?update?加鎖,然后發(fā)現(xiàn)了一些問題。1、當(dāng)我們使用主鍵查詢?nèi)ゼ渔i的時(shí)候,可以對(duì)這條記錄加行鎖打開一個(gè)終端:執(zhí)行一下代碼:mysql> begin;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from ticket where id = 2 for update;

那么?id=2這個(gè)記錄就會(huì)被加行寫鎖。令一個(gè)終端將無(wú)法讀取該記錄,但是卻可以讀取其他記錄#可以讀取加鎖

mysql> select * from ticket where id = 3 for update;

#不可以讀取

mysql> select * from ticket where id = 2 for update;

2、但是當(dāng)我們按非主鍵查詢會(huì)怎樣呢mysql> begin;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from ticket where uid = 0 limit 1 for update;

那么這個(gè)時(shí)候,這個(gè)表會(huì)被鎖住,任何記錄都不能再讀取加鎖//不可讀取,等待釋放鎖

mysql> select * from ticket where id = 1 for update;

//不可讀取等待釋放鎖

mysql> select * from ticket where uid = 0 limit 1 for update;

但是表鎖會(huì)減少并發(fā)。

結(jié)論

有沒有一種方法,可以在非主鍵字段查詢一條記錄時(shí)上實(shí)現(xiàn)加行寫鎖,期待高手支招。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的mysql for update 锁_MySql FOR UPDATE 锁的一点问题……的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。