假设您有一个用于桌面应用程序的表和几个用户。当用户打开记录时,我希望锁定此记录。我试过“用锁”的说法。效果很好。但是,当第二个用户想要更新同一记录时,我想要写一条消息:“对不起,您不能处理此订单,因为它已被锁定。其他人已经在您之前打开了此记录”。Firebird等待第一个提交/回滚的用户。我不想等。我想写一条错误信息。是否有一种简单的方法来询问firebird记录锁定状态?
有办法锁满桌子吗?或者,为了放置一个信号量/互斥(就像mysql上的get_lock ),我尝试保留set事务语句,但它不起作用。我的愿望是向用户显示一条消息。而不是等待。
谢谢
发布于 2014-08-07 07:28:28
如果您不想等待,那么将您的事务配置为使用NO WAIT或等待超时。但是,通过数据库事务控制这样的业务规则是不可取的,因为它需要长时间运行的事务来抑制垃圾收集,增加感兴趣的事务链,并增加更新冲突的机会。
我建议使用不同的选项,例如:
请注意,Firebird使用多版本并发控制(MVCC),因此显式锁定并不是很自然的。也请参阅这个answer to 。
使用RESERVING锁定表应该是可能的,但我从未使用过它,因此我不完全确定如何使用它,尽管您可能还需要指定FOR PROTECTED READ (参见InterBase6.0嵌入式SQL,第70/71页)。
https://stackoverflow.com/questions/25175679
复制相似问题