Fixed #30928 -- Clarified MySQL/MariaDB support of QuerySet.select_for_update() options.
Thanks Par Andersson for reporting the issue.
This commit is contained in:
parent
edeec1247e
commit
d94d7b113c
|
@ -625,10 +625,17 @@ both MySQL and Django will attempt to convert the values from UTC to local time.
|
||||||
Row locking with ``QuerySet.select_for_update()``
|
Row locking with ``QuerySet.select_for_update()``
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
MySQL does not support the ``NOWAIT``, ``SKIP LOCKED``, and ``OF`` options to
|
MySQL and MariaDB do not support some options to the ``SELECT ... FOR UPDATE``
|
||||||
the ``SELECT ... FOR UPDATE`` statement. If ``select_for_update()`` is used
|
statement. If ``select_for_update()`` is used with an unsupported option, then
|
||||||
with ``nowait=True``, ``skip_locked=True``, or ``of`` then a
|
a :exc:`~django.db.NotSupportedError` is raised.
|
||||||
:exc:`~django.db.NotSupportedError` is raised.
|
|
||||||
|
=============== ========= ==========
|
||||||
|
Option MariaDB MySQL
|
||||||
|
=============== ========= ==========
|
||||||
|
``SKIP LOCKED`` X (≥8.0.1)
|
||||||
|
``NOWAIT`` X (≥10.3) X (≥8.0.1)
|
||||||
|
``OF``
|
||||||
|
=============== ========= ==========
|
||||||
|
|
||||||
When using ``select_for_update()`` on MySQL, make sure you filter a queryset
|
When using ``select_for_update()`` on MySQL, make sure you filter a queryset
|
||||||
against at least set of fields contained in unique constraints or only against
|
against at least set of fields contained in unique constraints or only against
|
||||||
|
|
|
@ -1706,8 +1706,9 @@ them::
|
||||||
<QuerySet [<Person: ...)>, ...]>
|
<QuerySet [<Person: ...)>, ...]>
|
||||||
|
|
||||||
Currently, the ``postgresql``, ``oracle``, and ``mysql`` database
|
Currently, the ``postgresql``, ``oracle``, and ``mysql`` database
|
||||||
backends support ``select_for_update()``. However, MySQL doesn't support the
|
backends support ``select_for_update()``. However, MariaDB 10.3+ supports only
|
||||||
``nowait``, ``skip_locked``, and ``of`` arguments.
|
the ``nowait`` argument and MySQL 8.0.1+ supports the ``nowait`` and
|
||||||
|
``skip_locked`` arguments. MySQL and MariaDB don't support the ``of`` argument.
|
||||||
|
|
||||||
Passing ``nowait=True``, ``skip_locked=True``, or ``of`` to
|
Passing ``nowait=True``, ``skip_locked=True``, or ``of`` to
|
||||||
``select_for_update()`` using database backends that do not support these
|
``select_for_update()`` using database backends that do not support these
|
||||||
|
|
Loading…
Reference in New Issue