SELECT...FOR UPDATE - 只有 UPDATE 会释放锁吗?

May*_*ots 3 mysql postgresql locking

SELECT ...FOR UPDATE在 Java PreparedStatement 中使用 a 。我可能需要也可能不需要执行更新,具体取决于SELECT.

如果我执行rs.close();pStmt.close(); 执行更新,MySQL 会释放锁吗?有没有其他方法可以发布它,还是我必须执行更新?

如果我也使用 Postgres,同样的问题。

不确定它是否重要,但我打算rs.updateRow();用于更新。另外,MySQL 是否支持列级锁定?

基本上,我想在所选行中增加一个计数器,但前提是该行的状态列是ACTIVE。如果它不是ACTIVE,那么我只想在没有更新的情况下释放锁,以便其他线程/进程可以读/写该行。

jca*_*ron 5

不了解 MySQL,但在 Postgresql 中,锁仅在当前事务的持续时间内有效,因此:

  • 你一定已经开始了交易
  • 如果您提交或回滚事务,锁将被释放

如果您不启动显式事务,那么锁将立即被释放。