java代码对数据库的操作是顺序进行的,还是同步进行的?

weixin_43917000 2021-01-01 01:33:10
代码对数据库的操作是顺序进行的,还是同步进行的?
比如一段代码中对数据库中同一个表进行了2次顺序执行的操作:
先操作A:修改了表中的某些值
再操作B:根据A修改的值进行了查询操作
代码执行过程中是等待 操作A对表修改完后再进行操作B,还是操作A的代码运行了,但是数据库对表还没有修改完,代码就已经执行了操作B呢?
哪位大神知道运行的机制,能否回答一下?
...全文
1180 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
比特灵 2021-01-01
  • 打赏
  • 举报
回复
数据库是死的,它的同步不是靠自己,而是靠外部是如何操作的。例如你说的一致性问题,在之前用SQL是这样的: 改写数据的时候,需要select x from tablex where id=xx for update ,注意末尾这里有个for update,这样这行数据就会被锁定,其他的更新就进不来,这样就避免了并发的相互覆盖,只有前一个commit之后,后者才能操作这条数据。 但是这还没完,比如第一个用户打开的时候,数据内容是a,他准备将他修改为b,在他打开的时候,第二个用户也打开了这条数据,他发现这条数据必须修改为c,于是他也做了修改,然后他们现后进行了提交,如果不做任何特殊处理,他们都不知道这条数据是从a变为b再变为c、还是先变为c再变为b的。所以以下是完整的做法: 1,在数据结构上增加一个字段:updatetime(yyyymmddhh24miss) 2,用户打开数据的时候,当前显示的内容背后隐藏着这个字段,就是说打开a的时候,同时还有它的更新时间一起被查询并保存在客户端 3,用户提交a~b的修改的时候,一并将上一步打开的时间一起传回 4,后台select x,updatetime from tablex where id=xx for update,之后检查select出来的时间是否与上一步回传的时间一致,如果不一致,说明之前有其它客户端修改了这条数据,如果一致才进行修改,修改的时候同步updatetime到最新的sysdate
街头小贩 2021-01-01
  • 打赏
  • 举报
回复
这个取决于使用技术组合吧,若只是jdbc, 这取决于事务
编号灬9527 2021-01-01
  • 打赏
  • 举报
回复
自己去了解下事务 谢谢

51,400

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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