我希望能够在 "beginTransaction" 和结束的 "commit" 或 "rollback" 之间锁定整个表,以防止任何插入或更新操作。
我知道开始事务会导致隐式 UNLOCK TABLES 并且 LOCK table 会导致隐式 COMMIT... 那么有没有办法做到我想要的呢?
我希望能够在 "beginTransaction" 和结束的 "commit" 或 "rollback" 之间锁定整个表,以防止任何插入或更新操作。
我知道开始事务会导致隐式 UNLOCK TABLES 并且 LOCK table 会导致隐式 COMMIT... 那么有没有办法做到我想要的呢?
为什么?也许您已经忽略了事务的要点。
如果您使用可重复读取的事务隔离级别,插入、更新等操作可以在您的事务期间发生,但是您将无法看到它们。因此,就您的进程而言,表格被锁定用于插入/更新。除非它们仍在发生,它们仍然持久到磁盘,并且其他进程可以继续运行。
在您进行第一次“选择”之后,会创建一个快照,并且您实际上正在读取该快照,而不是最新版本。如果这是您想要的,请使用可重复读取。
select count(*) from table
,之后我就能够在这个“快照”中随时选择了。 - Flavienselect count(*) from table
在事务中,锁定msSQL 2000上的表
$_SESSION['on_going_transaction'] = true
。