【发布时间】:2011-09-22 19:58:58
【问题描述】:
我有一个存储过程,它将读取数据库中的一个值,然后增加一个值。许多程序同时使用此特定过程。我担心并发问题,尤其是读写器问题。有人可以建议我任何可能的解决方案吗?
谢谢。
【问题讨论】:
-
您可能应该在存储过程中使用事务......也许我是老式的并且有一些更现代的方法,但我使用事务来实现这一点 - 我对每个可以使用的操作都使用事务'不要写成单个查询。
-
但事务不会阻止另一个应用程序读取该值...我的意思是如果进程 A 正在使用存储过程 [使用事务] 更新 row1 的 column1,那么进程 B 仍然可以读取row1 的 column1,但它将获取现有值而不是更新值。希望你明白我的意思。如果我错了,你能解释一下吗?
-
使用事务你不会拒绝进程 B 完成他的工作,而这根本不是事务的目的。事务的目的是始终获得一致的状态,就好像进程是唯一同时使用数据库的进程。因此,当进程 A 处于事务中间时,进程 B 可以读取数据库的旧状态。而且每笔交易都会像没有其他人同时使用数据库一样通过。
-
正确,这就是我的问题......事务不会阻止其他进程访问相同的值......它只会确保读取和写入操作不会同时发生拒绝访问....但是一旦我开始更新它,我需要锁定该行。但据我所知,存储过程中不允许使用 LOCK ......如果我错了,请纠正我。
标签: mysql stored-procedures concurrency