summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorBabak Mahmoudy <babak.mahmoudy@projectfocushq.com>2025-04-01 19:34:59 +1100
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2025-04-02 08:45:03 +0200
commitbe1b776ad8d6f9bccfbdf63f84b16fb81a13119e (patch)
tree9c94982a653338b53004099792b1ac36801717d1 /docs
parent3ee90747c8ea703ca6e1811966261a1fc8caedb8 (diff)
Fixed #36213 -- Doc'd MySQL's handling of self-select updates in QuerySet.update().
Co-authored-by: Andro Ranogajec <ranogaet@gmail.com>
Diffstat (limited to 'docs')
-rw-r--r--docs/ref/models/querysets.txt8
1 files changed, 8 insertions, 0 deletions
diff --git a/docs/ref/models/querysets.txt b/docs/ref/models/querysets.txt
index e16d6668ee..c7e8b974a7 100644
--- a/docs/ref/models/querysets.txt
+++ b/docs/ref/models/querysets.txt
@@ -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
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,
does not call any ``save()`` methods on your models, nor does it emit the
:attr:`~django.db.models.signals.pre_save` or