id summary reporter owner description type status component version severity resolution keywords cc stage has_patch needs_docs needs_tests needs_better_patch easy ui_ux 13906 REPEATABLE READ (as used by default on MySQL) breaks atleast QuerySet.get_or_create(). Sebastian Noack MySQL is the only database supported by django, which support transactions but is using an other isolation level than READ COMMITED. MySQL is using REPEATABLE READ by default. That means that when you execute a select statement, the result set will be the same for all subsequent queries, selcting the same rows (even if no rows ere returned). This obviously breaks concurrent calls of QuerySet.get_or_create(). It is hard to writing code using transactions, running on multiple RDBMS using different isolation levels. So i suggest, to make the MySQL backend set the isolation level to READ COMMITTED on each new connection. And add a setting disabling this behaviour for those who really know what they are doing or those who have configured it already as global default in their MySQL server. Cleanup/optimization closed Database layer (models, ORM) dev Normal wontfix mysql transaction isolation graham@… tomasz.zielinski@… miloslav.pojman@… jim.dalton@… anssi.kaariainen@… David Gouldin clelland@… gerdemb mmitar@… TTimo cal@… django@… Accepted 1 1 0 1 0 0