【问题标题】:How to perform SELECT FOR UPDATE with SKIP LOCKED on MySQL with Django如何使用 Django 在 MySQL 上使用 SKIP LOCKED 执行 SELECT FOR UPDATE
【发布时间】:2018-08-18 10:07:00
【问题描述】:

我有一个 Django 项目,它使用 MySQL v5.5 后端和 InnoDB 存储。
为了避免数据库中的竞争条件更新,我使用 select_for_update 来锁定行。 现在,如果此锁保持很长时间,对锁定行的任何查询都将超时。
我想通过以下选项之一来避免这种情况:

  1. 跳过被锁定的行,类似于SKIP LOCKED选项。
  2. 如果您查询的某些行被锁定,则立即返回,类似于NOWAIT 选项。
  3. 减少特定查询的锁定等待超时时间。

如何使用 Django ORM 执行这些操作?

【问题讨论】:

    标签: mysql django pessimistic-locking


    【解决方案1】:

    来自Django docs

    您还可以使用 select_for_update(skip_locked=True) 忽略锁定的行

    【讨论】:

    • 来自文档Currently, the postgresql, oracle, and mysql database backends support select_for_update(). However, MySQL doesn’t support the nowait and skip_locked arguments.,我正在使用 MySQL。
    猜你喜欢
    • 2016-01-29
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2021-12-05
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多