SQL的四种隔离级别
①Read_Uncommitted(读未提交) 隔离级别最低,并发性高,也称脏读。
②Read_Committed(读已提交) 大多数数据库默认隔离级别(不包括MySQL)。
③Repeatable_Read (可重复度) MySQL默认隔离级别。保证同一事物的多个实例在并发读取数据时,会看到同样的数据行。
④Serializable(可串行化) 隔离级别最高,他通过强制事物排序,使之不能相互冲突。
三种数据库默认隔离级别
SQL Server 读已提交
Oracle 读已提交
MySQL 可重复度
脏读:某个事物已更新一份数据,另一事物在此时读取了同一份数据,由于某些原因,前者回滚了,则另一事物所读取的数据就不正确。
不可重复读:在一个事物的两次查询的数据不一致。
幻读:在一个事物的两次查询的数据行不一致。
修改事物权限的语句
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL [Read_Uncommitted|Read_Committed|Repeatable_Read|SERIALIZABLE]
查询现有隔离级别
SHOW VARIABLES LIKE 'tx_isolation'
查询全局事物隔离级别
SHOW GLOBAL VARIABLES LIKE 'tx_isolation'
事物的七种传播行为
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘
3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。