1
0
mirror of https://github.com/django/django.git synced 2025-05-04 22:17:34 +00:00

Fixed #36213 -- Doc'd MySQL's handling of self-select updates in QuerySet.update().

Co-authored-by: Andro Ranogajec <ranogaet@gmail.com>
This commit is contained in:
Babak Mahmoudy 2025-04-01 19:34:59 +11:00 committed by Sarah Boyce
parent 3ee90747c8
commit be1b776ad8

View File

@ -2961,6 +2961,14 @@ Using ``update()`` also prevents a race condition wherein something might
change in your database in the short period of time between loading the object change in your database in the short period of time between loading the object
and calling ``save()``. and calling ``save()``.
.. admonition:: MySQL does not support self-select updates
On MySQL, ``QuerySet.update()`` may execute a ``SELECT`` followed by an
``UPDATE`` instead of a single ``UPDATE`` when filtering on related tables,
which can introduce a race condition if concurrent changes occur between
the queries. To ensure atomicity, consider using transactions or avoiding
such filter conditions on MySQL.
Finally, realize that ``update()`` does an update at the SQL level and, thus, Finally, realize that ``update()`` does an update at the SQL level and, thus,
does not call any ``save()`` methods on your models, nor does it emit the does not call any ``save()`` methods on your models, nor does it emit the
:attr:`~django.db.models.signals.pre_save` or :attr:`~django.db.models.signals.pre_save` or