我希望能够锁定整个表以防止“beginTransaction”和结束“commit”或“rollback”之间的任何INSERT或UPDATE。
我知道开始一个事务导致一个隐式的UNLOCK TABLES,一个LOCK表导致一个隐含的COMMIT ......所以有什么方法可以做我想要的吗?
答案 0 :(得分:2)
为什么呢?也许你已经错过了交易点。
如果您在交易过程中使用可重复读取事务隔离,插入,更新等,但您将无法查看。因此,就您的流程而言,表 已锁定以进行插入/更新。除了它们仍在发生之外,它们仍然可以耐受光盘,其他过程可以继续。
完成第一次“选择”后,会创建一个快照,您正在有效地阅读该快照,而不是最新版本。如果这是你想要的,可重复阅读对你有用。
答案 1 :(得分:1)
select count(*) from table
在事务中,将表锁定在ms SQL 2000上
答案 2 :(得分:-1)
如果你正在使用PHP,那么当有事务发生时,你可以设置一个SESSION变量来告诉脚本不要对数据库做任何事情,即$_SESSION['on_going_transaction'] = true
。
当事务完成时,只需销毁SESSION变量,以便可以发生另一个事务。这更容易。