现在,Django 1.6已在MysqL中启用自动提交,这不再是问题。flush_transaction()
无论你的MysqL是处于REPEATABLE-READ
(默认)READ-COMMITTED
模式还是事务隔离模式,上面的示例现在都可以正常运行而无需编写代码。
在非自动提交模式下运行的早期Django
版本中发生的事情是,第一条select
语句打开了一个事务。由于MysqL的默认模式是REPEATABLE-READ
这意味着后续select
语句不会读取对数据库的任何更新-因此需要flush_transaction()
上面的代码来停止事务并开始新的事务。
仍然有你为什么要使用READ-COMMITTED
事务隔离的原因。如果要在终端1中进行事务处理,并且想要查看来自终端2的写入,则需要使用READ-COMMITTED
。