mysql锁的问题

查看:86
本文介绍了mysql锁的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

逻辑是我现在有个商品 数量是2个,然后我去买一个商品,然后数量变为1,在有并发的情况是有可能数量为0了,这时候购买就会有问题,所以说我选择加锁,但加了锁我又有了新的问题,请往下看。。。。

我现在有2个终端来模拟并发,

加锁首先要

set autocommit=0;

begin

然后查询

select * from products where id=1 for update;

+----+----------+
| id | quantity |
+----+----------+
|  1 | 2       |
+----+----------+
1 row in set (0.00 sec)

得到数量为2,这时候去更新

update products set quantity=1 where id=1;

然后这时候我们去2号终端查询

select * from products where id=1 for update;

结果依然是

+----+----------+
| id | quantity |
+----+----------+
|  1 | 2       |
+----+----------+
1 row in set (0.00 sec)

那我想知道,其实1号终端已经执行了update,但是还没有执行 commit work,那这时候2号终端如果去update的话,会误以为数量还是为2,其实这时候应该已经变成了1了,想问下怎么解决这种问题。。。

解决方案

给几点思路:

  • 设置mysql隔离级别,设置成read commit(可提交读),效果是可以在当前事物看到其他事物提交的结果,总共有四个,可以去百度。

  • 加快速度,加快速度,加快速度。(可用redis的消息队列,redis内置了各种数据类型和数据结构)

  • 用mysql的消息队列(这里是思路:http://m.ithao123.cn/content-8944417.html:)

推荐第一种,简单,也靠谱。

这篇关于mysql锁的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆