mysql for update 鎖_MySql FOR UPDATE 鎖的一點問題……

問題描述

假設一個情況,這里只是假設,真實的情況可能不會這樣設計,但是假如真的發生了....鐵老大有一張這樣的ticket表,用來存放北京到上海的票。

iduidstart_addrend_addrbook_time

11300009860上海北京13866660321

20上海北京

30上海北京

40上海北京

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

實驗結果

實驗了一下for?update?加鎖,然后發現了一些問題。1、當我們使用主鍵查詢去加鎖的時候,可以對這條記錄加行鎖打開一個終端:執行一下代碼:mysql> begin;

Query OK, 0 rows affected (0.00 sec)

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

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

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

#不可以讀取

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

2、但是當我們按非主鍵查詢會怎樣呢mysql> begin;

Query OK, 0 rows affected (0.00 sec)

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

那么這個時候,這個表會被鎖住,任何記錄都不能再讀取加鎖//不可讀取,等待釋放鎖

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

//不可讀取等待釋放鎖

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

但是表鎖會減少并發。

結論

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395254.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395254.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器機房新風系統,某機房新風系統設計方案參考

《某機房新風系統設計方案參考》由會員分享,可在線閱讀,更多相關《某機房新風系統設計方案參考(3頁珍藏版)》請在人人文庫網上搜索。1、某機房新風系統設計方案參考根據以上要求并結合中華人民共和國電子計算機機房的設計規范,為保證機房正壓…

css 畫三角形

CSS三角形繪制方法#triangle-up {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid red;}#triangle-down {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid trans…

面試官面試前端_如何面試面試官

面試官面試前端by Aline Lerner通過艾琳勒納(Aline Lerner) 如何面試面試官 (How to interview your interviewers) For the last few semesters, I’ve had the distinct pleasure of guest-lecturing MIT’s required technical communication class for computer science m…

shell 字符串分割

語法1: substring${string:start:len} string的下標從0開始,以start可是,截取len個字符,并賦值于substring 1 #!/bin/bash 2 #substr${string:start:len} 3 str"123456789" 4 substr${str:3:3} 5 echo $substr 6 7 輸出&#xff1…

方格取數(網絡流)

題目鏈接:ヾ(≧?≦*)ゝ 大致題意:給你一個\(n*m\)的矩陣,可以取任意多個數,但若你取了一個數,那么這個數上下左右的數你就都不能取,問能取到的最大值是多少。 Solution: 首先,我們可以把矩陣上…

mysql創建的數據庫都在哪里看_mysql 怎么查看創建的數據庫和表

1、 //看當前使用的是哪個數據庫 ,如果你還沒選擇任何數據庫,結果是NULL。mysql>select database(); ------------ | DATABASE() | ------------ | menagerie | ------------2、//查看有哪些數據庫 mysql> show databases;--------------------| Database …

wordpress 基礎文件

需要用到的PHP基礎文件有&#xff1a; 404.php404模板 rtl.css 如果網站的閱讀方向是自右向左的&#xff0c;會被自動包含進來comments.php 評論模板single.php文章模板。顯示單獨的一篇文章時被調用&#xff0c;如果模板不存在會使用 index.phpsingle-<post-type>.php自…

ajax請求 apend,jsp如何獲取ajax append的數據?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓我在網上下了個上傳圖片的js&#xff0c;我想上傳圖片的時候還提交一些參數&#xff0c;但是后臺用request.getParameter("th");獲取出來是nullfunction uploadSubmitHandler () {if (state.fileBatch.length ! 0) {var …

linux 機器格式化_為什么機器人應該為我們格式化代碼

linux 機器格式化by Artem Sapegin通過Artem Sapegin 為什么機器人應該為我們格式化代碼 (Why robots should format our code for us) I used to think that a personal code style is a good thing for a programmer. It shows you are a mature developer who knows what g…

Pytest高級進階之Fixture

From: https://www.jianshu.com/p/54b0f4016300 一. fixture介紹 fixture是pytest的一個閃光點&#xff0c;pytest要精通怎么能不學習fixture呢&#xff1f;跟著我一起深入學習fixture吧。其實unittest和nose都支持fixture&#xff0c;但是pytest做得更炫。 fixture是pytest特有…

mysql 慢日志報警_一則MySQL慢日志監控誤報的問題分析

之前因為各種原因&#xff0c;有些報警沒有引起重視&#xff0c;最近放假馬上排除了一些潛在的人為原因&#xff0c;發現數據庫的慢日志報警有些奇怪&#xff0c;主要表現是慢日志報警不屬實&#xff0c;收到報警的即時通信提醒后&#xff0c;隔一會去數據庫里面去排查&#xf…

用css實現自定義虛線邊框

開發產品功能的時候ui往往會給出虛線邊框的效果圖&#xff0c;于是乎&#xff0c;我們往往第一時間想到的是用css里的border&#xff0c;可是border里一般就提供兩種效果&#xff0c;dashed或者dotted&#xff0c;ui這時就不滿意了&#xff0c;說虛線太密了。廢話不多說&#x…

無限復活服務器,絕地求生無限復活模式怎么玩 無限復活新手教程

相信不少的絕地求生玩家們最近都聽說了其無限復活模式吧?因此肯定想要知道這種模式究竟該怎么玩&#xff0c;所以下面就來為各位帶來此玩法的攻略相關&#xff0c;希望各位在看了如下的內容之后恩呢狗狗了解到新手教程攻略一覽。“War”模式的設定以及玩法規則如下&#xff1a…

lua math.random()

math.random([n [,m]]) 用法&#xff1a;1.無參調用&#xff0c;產生[0, 1)之間的浮點隨機數。 2.一個參數n&#xff0c;產生[1, n]之間的整數。 3.兩個參數&#xff0c;產生[n, m]之間的整數。 math.randomseed(n) 用法&#xff1a;接收一個整數n作為隨即序列的種子。 例&…

零基礎學習ruby_學習Ruby:從零到英雄

零基礎學習ruby“Ruby is simple in appearance, but is very complex inside, just like our human body.” — Matz, creator of the Ruby programming language“ Ruby的外觀很簡單&#xff0c;但是內部卻非常復雜&#xff0c;就像我們的人體一樣。” — Matz &#xff0c;R…

windows同時啟動多個微信

1、創建mychat.bat文件(文件名任意)&#xff0c;輸入以下代碼&#xff0c;其中"C:\Program Files (x86)\Tencent\WeChat\"為微信的安裝路徑。以下示例為同時啟動兩個微信 start/d "C:\Program Files (x86)\Tencent\WeChat\" Wechat.exe start/d "C:\P…

mysql date time year_YEAR、DATE、TIME、DATETIME和TIMESTAMP詳細介紹[MySQL數據類型]

為了方便在數據庫中存儲日期和時間&#xff0c;MySQL提供了表示日期和時間的數據類型&#xff0c;分別是YEAR、DATE、TIME、DATETIME和TIMESTAMP。下面列舉了這些MSL中日期和時間數據類型所對應的字節數、取值范圍、日期格式以及零值。從上圖中可以看出&#xff0c;每種日期和時…

九度oj 題目1380:lucky number

題目描述&#xff1a;每個人有自己的lucky number&#xff0c;小A也一樣。不過他的lucky number定義不一樣。他認為一個序列中某些數出現的次數為n的話&#xff0c;都是他的lucky number。但是&#xff0c;現在這個序列很大&#xff0c;他無法快速找到所有lucky number。既然這…

安裝Tengine

1.安裝VMware2.安裝CentOS6.53.配置網絡a.修改 /etc/sysconfig/network-scripts/ifcfg-eth0配置文件,添加如下內容DEVICEeth0HWADDR00:0C:29:96:01:6BTYPEEthernetUUID41cbd943-024b-4341-ac7a-e4d2142b4938ONBOOTyesNM_CONTROLLEDyesBOOTPROTOnoneIPADDRxxx.xxx.x.xxx#例如:IP…

node seneca_使用Node.js和Seneca編寫國際象棋微服務,第2部分

node seneca處理新需求而無需重構 (Handling new requirements without refactoring) Part 1 of this series talked about defining and calling microservices using Seneca. A handful of services were created to return all legal moves of a lone chess piece on a ches…