问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求教For Update 解锁 问题

发布网友 发布时间:2022-05-05 16:04

我来回答

2个回答

懂视网 时间:2022-05-05 20:25

问题描述 假设一个情况,这里只是假设,真实的情况可能不会这样设计,但是假如真的发生了....铁老大有一张这样的ticket表,用来存

问题描述

假设一个情况,这里只是假设,真实的情况可能不会这样设计,但是假如真的发生了....
铁老大有一张这样的ticket表,用来存放北京到上海的票。

id uid start_addr end_addr book_time

1 1300009860 上海 北京 13866660321

2 0 上海 北京

3 0 上海 北京

4 0 上海 北京

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;

但是表锁会减少并发。
结论
有没有一种方法,可以在非主键字段查询一条记录时上实现加行写锁,期待高手支招。

linux

热心网友 时间:2022-05-05 17:33

是这样的 你 select * from xx where id=xx for update 数据库会给你改成 begin; select * from xx where id=xx for update commit; 这个是叫做 隐式提交。--mysql有很多隐式提交的语句的 所以如果你要显式提交事务的话 你得手动 在select * fro...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...时间会发作,很痛的,请问是这样吗?会痛多久? ...已经坏了,如今全身浮肿,尿排不出,医生说就这 我爷爷得了肝癌晚期,腹水,不能手术.听说氩氦超冷刀技术能治.哪里有... 父亲59岁得了肝癌晚期,医生说最多半年时间了,上面还有80多岁的爷爷... 长春跑大连的列车员,怎么区分正式分和临时工呢? 员工刚怀孕就被开除,开除负责人拒不认错,你如何看待该公司的态度?_百 ... 员工在职期间怀孕,老板可以无故迟退吗? 老板开除怀孕女员工违法吗 如何选购蚊帐 什么样的蚊帐最好 Internet 突然不好用了 成都数字跳动网络技术开发有限公司 拖欠员工工资怎么办? 成都友为网络技术有限公司怎么样? 我喜欢上一个人,对方不主动,我该怎么办? 成都飞速互通网络技术有限公司怎么样? 如果两个人互相喜欢但都不主动怎么办 成都信通网络技术有限公司怎么样? 我喜欢的女生一点都不主动,我该怎么办? 成都宽视网络技术有限公司怎么样? 成都简册网络技术有限公司怎么样? 喜欢一个人他总是不主动怎么办 恋爱高手进(喜欢的人不主动怎么办) 我喜欢的人从来不主动找我怎么办 成都深盛思教育咨询有限责任公司怎么样? 喜欢的人再也不主动联系你了该怎么办? 四川南典网络科技有限公司怎么样? 成都华益网络技术有限公司怎么样? 成都全盛网络技术有限公司怎么样? 成都众应网络技术有限公司怎么样? 成都市鼎联宇轩网络科技有限公司怎么样? 专升本学历可以考教师资格证吗 求clamp画的《创龙传》漫画全集 clamp《创龙传》动画或漫画在哪下? 大概在2001年或2002年看的漫画,不记得名字了。 我想找一部老漫画 故事第一集是几个少年在家 军队来袭击他们 他们把家炸了 开始流浪 他们几个少年都很厉害 水泥粉的密度是多少啊? 跪求单机游戏《创龙传》 水泥的密度一般都是多少 日本的插画师是不是只有几个人啊,看了好多动漫,感觉人物都是一个娘胎出来的 clamp有哪些漫画很好看,而且比较有名的?推荐下~ 水泥自制标准粉的标准值怎么算? 求红眸棕发的动漫男生、须列明动漫出处。 水泥密度是多少kg每立方米 水泥密度是多少 42.5水泥的密度是多少? 水泥的密度和煤灰的密度是多少??? 水泥密度的计算值,怎样修约,以及水泥的比表面积如何计算? 如何在手机上查出绑在支付宝上邮政银行卡余额 学习劳动法有什么感想 长春市建设技工学校怎么样?