diff options
| author | Babak Mahmoudy <babak.mahmoudy@projectfocushq.com> | 2025-04-01 19:34:59 +1100 |
|---|---|---|
| committer | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-04-02 08:46:48 +0200 |
| commit | c68f3516be266cbc3929e51e32ed63d304ac5cc6 (patch) | |
| tree | 94fadabfdbbb245d664cf87c3b47423bafd1e1dd /docs/ref | |
| parent | 614be94957d6b17a8b3d051204e62559e1f089e6 (diff) | |
[5.2.x] Fixed #36213 -- Doc'd MySQL's handling of self-select updates in QuerySet.update().
Co-authored-by: Andro Ranogajec <ranogaet@gmail.com>
Backport of be1b776ad8d6f9bccfbdf63f84b16fb81a13119e from main.
Diffstat (limited to 'docs/ref')
| -rw-r--r-- | docs/ref/models/querysets.txt | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/docs/ref/models/querysets.txt b/docs/ref/models/querysets.txt index 46889da7e4..7c76daa824 100644 --- a/docs/ref/models/querysets.txt +++ b/docs/ref/models/querysets.txt @@ -2960,6 +2960,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 |
