事务的隔离级别
查看事务的级别
select @@tcx_isolation
/*
事务A开启以后,可以读取到事务B还没有提交的数据(即事务还没有提交就读到了)
这种隔离级别存在的问题就是:
脏读现象!
这种隔离级别是理论上的,大多数的数据库隔离级别都是二档起步
*/
读已提交
读的时候事务还没有提交,后来事务B提交了,再读的结果不一样
就是前后不一致
意思不能动态读取
/*
事务A开启以后,只能读取事务B提交之后的数据
这种隔离级别解决了脏读的现象
但这种隔离级别存在不可重复读
*/
不可重复读
/*
在事务开启之后,第一次读到的数据是3条,当前事务还没有结束,
可能第二次再读取的时候,读到的是4条,3不等于4;
这种就是不可重复读
这种隔离级别是比较真实的数据,每一次读到的数据都是绝对真实,
oracle数据库默认的隔离级别是:read commited
*/
可重复读
MySQL默认就是这个隔离级别
repeatable read
读到的永远都是事务开启时,第一次读取到的数据
/*
repeatable read 《提交之后也读不到,永远读取的都是刚开启事务时的数据》
可重复读:
事务A开启事务之后,不管是多久,每一次在事务A中读取的数据都是一致的,
即使B事务将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变;
存在的问题:
可能会出现幻读,可能每一次读取的数据都是幻象,不够真实
例如:造成9点开始了A事务,只要事务A不结束,到晚上9点,读到的数据还是那样,读到是假象不够真实
*/
序列化/串行化:serializable
/*
这是最高的隔离级别,效率最低,解决了事务隔离的所有问题
这种隔离级别表示事务排队,不能并发,即:一个事务操作的同时,其它事务不能操作,只能等待
*/