DBAL 是否支持 SELECT FOR UPDATE update/delete 锁定其他数据库用户?

Does DBAL support SELECT FOR UPDATE update/delete lock on other database users?

我在我的项目中使用 DBAL 因为在我正在转换为 Symfony v2 的已经编写的项目中转换数据库语句更容易.8MySQL 比使用完整的 Doctrine,但现在我需要实现 "read-only row locks" 以防止其他用户更改数据,同时连续执行一对紧密耦合但独立的 SELECT 语句,我认为我应该使用 TransactionsSELECT FOR UPDATE 语句。但是,我在其文档中没有看到 DBAL 支持 SELECT FOR UPDATE 语句。我确实看到支持 Transactions,但据我了解,这些不会阻止其他用户 UPDATE-ing 或 DELETE-ing SELECTs 语句正在使用的同一数据行中的数据。

具体来说,两个 SELECT 共享第一个 SELECT 在一行中检索到的数据第二个 SELECT 根据第一个 SELECT 从同一个表中检索多行。两个SELECT有点复杂,不知道能不能把它们组合成一个超大的单体SELECT,我也不想这样做,因为那样会使新的 SELECT 将来更难维护。

问题是其他用户可能会更新第一个 SELECT 检索到的相同值,如果这在两个 [ 之间完成=80=]s,它会破坏第二个 SELECT 并阻止第二个 returning 数据或至少return数据错误。

我认为我需要使用 SELECT FOR UPDATE 来锁定它检索的行,以暂时阻止其他用户执行更新和删除操作由第一个 SELECT 检索到的单行,但由于我实际上并没有执行更新,而是两个 SELECTs,如何在不执行 'fake' 更新的情况下释放第一个 SELECT 锁定的一行的锁,例如 [=22] =]UPDATE-ING 一个列值与它已有的值相同?

谢谢

对于您想要可重复结果的交易:

START TRANSACTION READ ONLY

SELECT ...

{一些处理}

SELECT {覆盖相同的行} [将 return 相同的结果]

提交

注意:READ ONLY 是可选的

通过 运行 两个 mysql 客户端连接和观察者进行实验结果。另一个连接可以修改或插入覆盖第一个选择条件的行,而第一个事务不会观察到它们。