postgresql 当UPDATE/DELETE事务在要更新大量行时获取行锁

bqf10yzr  于 2023-02-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(240)

假设我有一个DELETE/UPDATE语句,它应该更新/删除1亿行,那么DELETE/UPDATE语句是在事务刚开始时就获得这1亿行的锁,还是在更新行值时遇到行时获得锁?
模拟这个场景对我来说非常坚韧。任何帮助都将不胜感激。

nukf8bse

nukf8bse1#

我不能肯定这是否适用于所有RDBMS,但对于Postgres、MS SQL Server和Oracle,以下是正确的:
在开始更新任何内容之前,DBMS会尝试获取每一行的锁,只有在获得所需的每一行的锁之后,才开始更新/删除。
还有一个有趣的注意事项,假设您需要更新ID为1、2和3的行。假设2被锁定,您的更新仍将锁定行1和3,并且它将等待行2也锁定它,直到它将持有行1和3上的锁,并且只有当它也获得行2上的锁并更新所有3行时,它才会释放锁。
希望这些信息能对你有所帮助。

相关问题