如果同一时间两个请求修改同一个数据会出现什么情况呢?

laiyilong 2015-01-04 05:13:35
假设数据库里有个值是 100,
在同一时间(假如精确到毫秒),
第一个请求把这个值减去10,
第二个请求把这个值减去20,
那最后数据库里的值会是90、80还是70呢?
对这个不太了解数据库是怎么处理的,
因为在我看来,
两个请求同一时间去读这个值的时候不是都得到100吗?
希望大牛解释解释!!!
...全文
454 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
roundman 2015-01-04
  • 打赏
  • 举报
回复
去百度一下数据库事务
laiyilong 2015-01-04
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
CPU 一次只会处理一条指令,在计算机中其实不存在同时,并发一条指令的问题。一定会有一个先后。
刚刚网上搜了一下, 这个应该就是并发处理的问题, 可能是我的问题问得不够准确, 我再重新假设一下, 比如数据库里有一个值是100, 我有一段代码, 先判断这个值是否大于99, 如果是那就执行其中一段代码,假设这里要用两秒钟去处理代码, 最后用update把这个值减去10,得到90, 那么如果同时提交两个请求的话问题就来了, 第一个查询到是100,要等两秒才能更新为90, 那第二个查询到也是100,因为第一个还没更新, 第二个最后更新得到80, 我就想知道怎么能让第一个更新完后第二个才能查询, 因为第一个更新得到90第二个就不能再更新了。
laiyilong 2015-01-04
  • 打赏
  • 举报
回复
引用 1 楼 benluobobo 的回复:
不可能存在同时的情况 总有一个先后顺序,当第一个请求需修改的时候,会锁定记录 此时只有当这个请求完成后 后面的请求才能继续修改
你的意思是即使时间一样, 到了数据库这里它就会按顺序来执行, 最后能得到正确的结果是吗? 数据库本身设计就是这样的吗? 要不要在哪里设置才行的?
ACMAIN_CHM 2015-01-04
  • 打赏
  • 举报
回复
CPU 一次只会处理一条指令,在计算机中其实不存在同时,并发一条指令的问题。一定会有一个先后。
benluobo 2015-01-04
  • 打赏
  • 举报
回复
不可能存在同时的情况 总有一个先后顺序,当第一个请求需修改的时候,会锁定记录 此时只有当这个请求完成后 后面的请求才能继续修改

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧