线程安全读取mysql_请教多线程数据库程序如何保证线程安全

请问多线程数据库程序怎么保证线程安全

问题是这样子:多台电脑(或一台电脑中的多个线程)分别从服务器读取数据,并将数据修改后写回数据库。但如果在写入服务器时服务器内数据和本机读取时不一致,则写入操作被拒绝。这项功能怎么实现?

比如:原数据为1,A机读取数据库,B机读取数据库,A机将数据库内容改为2成功,B机申请将数据改为3时发现数据已经被修改过,故修改申请被拒绝。

------解决方案--------------------

设置修改标志位

------解决方案--------------------

如果是B/S形式的

那可以通过在你说的表中添加一个SESSION_ID的标识,并添加一个字段表明目前的操作,比如“编辑”、“已保存”

A申请对数据进行更改,首先查询SESSION_ID是否有值,有值的情况下,查询SESSION_ID是否过期(这个不涉及数据库操作了,请自行根据你的WEB服务器进行响应操作),如果已经过期,则把当前SESSION_ID修改为A的SESSION_ID,并把操作字段修改为“编辑”

如果A编辑完并提交编辑修改,则把操作字段修改为“已保存”(或者直接把SESSION_ID清空)

A编辑期间,如果B发起修改申请,则一样先查询是否有SESSION_ID,已存在,且SESSION_ID未过期,再查询操作字段是否为“编辑”,如果3者都满足的话,则返回提示,告诉B现在无法对该数据进行修改

------解决方案--------------------

这叫乐观锁定技术。

SELECT ...

OLD_VALUE=MODIFY_KEY

....

交互性操作

....

提交的时候

BEGIN

UPDATE XXX SET MODIFY_KEY=NEW_VALUE WHERE ID=XXX AND MODIFY_KEY=OLD_VALUE

-- 如果MODIFY_KEY被人修改, 这行UPDATE的 ROWCOUNT为零

IF ROWCOUNT=0 THEN

ROLLBACK

ELSE

COMMIT

END

原创文章,转载请注明: 转载自搞代码

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

verwandte

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值