聚合全网技术文章,根据你的阅读喜好进行个性推荐
update number set x=x-1 where x > 0 mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
评论删除后,数据将无法恢复
引用来自“winston952”的评论
你更新库存的时候 为啥还要加锁呢?你听过lua脚本 不是具有原子性了嘛引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
引用来自“xiaolyuh”的评论
引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
是不是这样子的,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存是5,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以出现了超扣的问题?引用来自“沧海_Sea”的评论
是的 可以修改隔离级别为 read commit 或者在事务开启之前使用redis加锁引用来自“xiaolyuh”的评论
这个我写代码测试了 但是怎么没有出现超扣问题?引用来自“沧海_Sea”的评论
可能是测试方式有问题吧引用来自“xiaolyuh”的评论
我开启了两个mysql客户端,将他们的自动提交关掉了。在A客户端执行更新,提交后怎么马上就能在B客户端查询到啊,按道理B客户端是可重复读的不因该能看到更改啊引用来自“沧海_Sea”的评论
1 自动提交关掉2 A 客户端查询
3 B 客户端查询
4 A 客户端更新
5 B客户端查询
6 A客户端提交
7 B客户端查询 这个时候还是查不到第4步跟新的数据
8 B客端更新
9 B客户端查询 这个时候看到的库存是扣了两个的。没有超扣
所以我认为可重复读是针对读的,因为mysql是基于多版本并发控制的,在更新的时候他会去先去插入一条数据并将这条数据的创建版本号设置成当前事务版本号,将当前事务版本号设置成老数据的删除版本号。所以不会有超扣的问题
引用来自“沧海_Sea”的评论
引用来自“xiaolyuh”的评论
引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
是不是这样子的,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存是5,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以出现了超扣的问题?引用来自“沧海_Sea”的评论
是的 可以修改隔离级别为 read commit 或者在事务开启之前使用redis加锁引用来自“xiaolyuh”的评论
这个我写代码测试了 但是怎么没有出现超扣问题?引用来自“沧海_Sea”的评论
可能是测试方式有问题吧引用来自“xiaolyuh”的评论
我开启了两个mysql客户端,将他们的自动提交关掉了。在A客户端执行更新,提交后怎么马上就能在B客户端查询到啊,按道理B客户端是可重复读的不因该能看到更改啊引用来自“沧海_Sea”的评论
1 自动提交关掉2 A 客户端查询
3 B 客户端查询
4 A 客户端更新
5 B客户端查询
6 A客户端提交
7 B客户端查询 这个时候还是查不到第4步跟新的数据
8 B客端更新
9 B客户端查询 这个时候看到的库存是扣了两个的。没有超扣
所以我认为可重复读是针对读的,因为mysql是基于多版本并发控制的,在更新的时候他会去先去插入一条数据并将这条数据的创建版本号设置成当前事务版本号,将当前事务版本号设置成老数据的删除版本号。所以不会有超扣的问题
引用来自“xiaolyuh”的评论
引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
是不是这样子的,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存是5,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以出现了超扣的问题?引用来自“沧海_Sea”的评论
是的 可以修改隔离级别为 read commit 或者在事务开启之前使用redis加锁引用来自“xiaolyuh”的评论
这个我写代码测试了 但是怎么没有出现超扣问题?引用来自“沧海_Sea”的评论
可能是测试方式有问题吧引用来自“xiaolyuh”的评论
我开启了两个mysql客户端,将他们的自动提交关掉了。在A客户端执行更新,提交后怎么马上就能在B客户端查询到啊,按道理B客户端是可重复读的不因该能看到更改啊引用来自“沧海_Sea”的评论
1 自动提交关掉2 A 客户端查询
3 B 客户端查询
4 A 客户端更新
5 B客户端查询
6 A客户端提交
7 B客户端查询 这个时候还是查不到第4步跟新的数据
8 B客端更新
9 B客户端查询 这个时候看到的库存是扣了两个的。没有超扣
所以我认为可重复读是针对读的,因为mysql是基于多版本并发控制的,在更新的时候他会去先去插入一条数据并将这条数据的创建版本号设置成当前事务版本号,将当前事务版本号设置成老数据的删除版本号。所以不会有超扣的问题
引用来自“freezingsky”的评论
用户下单三个商品,前面二个扣成功能,第三个扣不成功,你这种方式怎么办?2:直接买两个商品
感觉第一种合理一些,这样可以提示用户,并让用户决定是否继续购买剩余两个商品
引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
是不是这样子的,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存是5,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以出现了超扣的问题?引用来自“沧海_Sea”的评论
是的 可以修改隔离级别为 read commit 或者在事务开启之前使用redis加锁引用来自“xiaolyuh”的评论
这个我写代码测试了 但是怎么没有出现超扣问题?引用来自“沧海_Sea”的评论
可能是测试方式有问题吧引用来自“xiaolyuh”的评论
我开启了两个mysql客户端,将他们的自动提交关掉了。在A客户端执行更新,提交后怎么马上就能在B客户端查询到啊,按道理B客户端是可重复读的不因该能看到更改啊引用来自“沧海_Sea”的评论
1 自动提交关掉2 A 客户端查询
3 B 客户端查询
4 A 客户端更新
5 B客户端查询
6 A客户端提交
7 B客户端查询 这个时候还是查不到第4步跟新的数据
8 B客端更新
9 B客户端查询 这个时候看到的库存是扣了两个的。没有超扣
所以我认为可重复读是针对读的,因为mysql是基于多版本并发控制的,在更新的时候他会去先去插入一条数据并将这条数据的创建版本号设置成当前事务版本号,将当前事务版本号设置成老数据的删除版本号。所以不会有超扣的问题
引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
是不是这样子的,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存是5,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以出现了超扣的问题?引用来自“沧海_Sea”的评论
是的 可以修改隔离级别为 read commit 或者在事务开启之前使用redis加锁引用来自“xiaolyuh”的评论
这个我写代码测试了 但是怎么没有出现超扣问题?引用来自“沧海_Sea”的评论
可能是测试方式有问题吧引用来自“xiaolyuh”的评论
我开启了两个mysql客户端,将他们的自动提交关掉了。在A客户端执行更新,提交后怎么马上就能在B客户端查询到啊,按道理B客户端是可重复读的不因该能看到更改啊2 A 客户端查询
3 B 客户端查询
4 A 客户端更新
5 B客户端查询
引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
是不是这样子的,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存是5,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以出现了超扣的问题?引用来自“沧海_Sea”的评论
是的 可以修改隔离级别为 read commit 或者在事务开启之前使用redis加锁引用来自“xiaolyuh”的评论
这个我写代码测试了 但是怎么没有出现超扣问题?引用来自“沧海_Sea”的评论
可能是测试方式有问题吧引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
是不是这样子的,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存是5,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以出现了超扣的问题?引用来自“沧海_Sea”的评论
是的 可以修改隔离级别为 read commit 或者在事务开启之前使用redis加锁引用来自“xiaolyuh”的评论
这个我写代码测试了 但是怎么没有出现超扣问题?引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
是不是这样子的,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存是5,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以出现了超扣的问题?引用来自“沧海_Sea”的评论
是的 可以修改隔离级别为 read commit 或者在事务开启之前使用redis加锁引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
是不是这样子的,假如库存是5,有A、B两个请求分别创建了事务并且都没有提交,当A事务提交了,改了库存是5,但是因为是事务隔离级别是可重复读的,所有B看不到A事务改的库存。到时B看到的库存还是5,所以出现了超扣的问题?引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
read commit 事务隔离级别没问题 但是 repeatable read 下, 会有幻读的情况引用来自“xiaolyuh”的评论
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
引用来自“沧海_Sea”的评论
update number set x=x-1 where x > 0
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题
mysql 的事务隔离级别是 repeatable read 这个 sql 更新库存肯定会出问题