我是靠谱客的博主 心灵美大船,最近开发中收集的这篇文章主要介绍mysql错误修改数据_mysql 针对高并发下,同时修改单条数据发生冲突致使数据错误的问题(例如:高并发下单,致使库存为负数)...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

毕业后第一次作的项目就是电商,可是当时也不明白这个问题。mysql

因此给本身埋下一个坑。sql

先说说当初的作法,和遇到的问题。性能

//开启事务spa

start transaction;事务

//查询库存it

select number from item where id = 1;io

//若是大于购买数量进入购买,若是小于返回错误 并rollback电商

//进入购买date

update item set item number = number - 1 where id = 1;select

//若是成功commit 若是失败 rollback

问题:

当两我的 同时下单,同时进入事务  这个时候两我的查的数量是相同的,如下为模拟

步骤1=》用户1:查询item 数量为5

步骤2=》用户2:查询item 数量为5

步骤3=》用户1:买了五个将item的数量减5 而且成功

步骤4=》用户2:买了五个将item的数量减5 因为mysql的自身锁的问题 (由于用户1 没有提交 因此用户2 须要等待用户1 commit 才能真正的修改为功)

步骤5=》用户1:commit 成功修改数量而且成功购买

步骤6=》用户2:等待状态解除,将item的数量也成功减5 数量变为-5

错误:最后item为-5

解决的办法:

1.乐观锁:在每一个用户commit 以前再从新查询 item的数量 若是为负数  rollback  而且说明库存不足

2.悲观锁:在查询的时候  select * from item where id = 1 改成  select * from item where id = 1 for update 进行锁定

这个时候其余用户是没法查询到的。

这是目前理解的两种方法,不过不明白这里面的具体性能问题是怎么样的。也不清楚哪一个方案更好。

在这里 也不讲述乐观锁和悲观锁了   由于本人也并非彻底理解 待我去寻摸一本书,弄明白了 在补充

最后

以上就是心灵美大船为你收集整理的mysql错误修改数据_mysql 针对高并发下,同时修改单条数据发生冲突致使数据错误的问题(例如:高并发下单,致使库存为负数)...的全部内容,希望文章能够帮你解决mysql错误修改数据_mysql 针对高并发下,同时修改单条数据发生冲突致使数据错误的问题(例如:高并发下单,致使库存为负数)...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部