Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
Django 执行makemigrations 的时候报错:
1
|
django.db.utils.ProgrammingError: ( 1064 , "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED' at line 1" ) |
网上搜索解决方案如下:
setting.py--->DATABASES 添加
'OPTIONS':{'isolation_level':None}
这个可能和我的mysql 版本有关,我的版本太低,用的mysql5.1
参考文章:http://bbs.51cto.com/thread-1550958-1.html
SET Transaction Isolation Level Read语法的四种情况
存储过程:SET Transaction Isolation Level Read语法的四种情况
这几天一直在弄存储过程,现在在这里跟大伙共享下资料:
SET Transaction Isolation Level Read UNCOMMITTED
使用这句东东呢可以分为四种情况,现在就在这里逐一介绍:
第一种情况:
READ COMMITTED
这句的作用是:
指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。
第二种情况:
READ UNCOMMITTED
这句的作用是:
执行脏读或0级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。
第三种情况:
REPEATABLE READ
这句的作用是:
锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。
第四种情况:
SERIALIZABLE
这句的作用是:
在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。