【发布时间】:2019-12-14 21:28:00
【问题描述】:
我正在寻找有关Django 2.0 release notes 条目背后的信息。说明:
MySQL 的默认隔离级别,可重复读取,在典型的 Django 使用中可能会导致数据丢失。为了防止这种情况并为了与其他数据库保持一致,默认隔离级别现在是已提交读。如果需要,您可以使用 DATABASES 设置来使用不同的隔离级别。
据我了解,可重复读取比已提交读取“更严格”,所以 Django 正在做什么来产生“数据丢失”是一个困扰我一段时间的问题。
是像prefetch_related 这样的东西吗?或者,一般来说,基于潜在陈旧(线程中的SELECTED)制作UPDATE 是或可以被认为是数据丢失?或者甚至更好——也许只有 MySQL 会做一些事情,或者有一个错误会使其在可重复读取时变得危险?
谢谢。
【问题讨论】:
-
关于“隔离级别”的文档说:“特别是,您可能会看到 get_or_create() 会引发 IntegrityError 但该对象不会出现在随后的 get() 调用中的情况。”
标签: mysql django transactions isolation-level