我有几个相同的应用程序独立运行。每个从数据库中读取一行(基于某些标准),执行一系列操作,最后更新该行。 因此,我想确保应用程序开始处理一行,不会被另一行处理。换句话说,我希望应用程序选择下一个可用行。 我该如何实现呢?
我尝试使用“select ... for update”,MVCC,不同类型的事务隔离的不同策略,但暂时没有运气。
答案 0 :(得分:1)
常见的解决方案是使用“州”栏:
处理行时,将状态设置为1.处理完成后,将其设置为2.这将适用于所有数据库。
如果要防止行处于“处理”状态(例如因为会话/连接已关闭),那么您可以添加一个列'processing_session'并用当前会话填充它(函数{{ 1}})处理时。要查看会话是否仍然存在,请使用表SESSION_ID()
。