mySQL默认第三种
脏读:当一个事务读取另一个事务尚未提交的修改时,产生脏读。
不可重复读:一个事务对同一行数据重复读取两次,但是却得到了不同的结果
幻读:事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据 比如:一个事务对数据库进行操作,这种操作的范围是数据库的全部行,然后第二个事务也在对这个数据库操作,这种操作可以是插入一行记录或删除一行记录,那么第一个是事务就会觉得自己出现了幻觉,怎么还有没有处理的记录呢? 或者 怎么多处理了一行记录呢?
未提交读:即使一个更新语句没有提交,但是别的事务可以读到这个改变,“排他写锁”实现
已提交读:语句提交以后只能读取到已经提交的数据 通过“瞬间共享读锁”和“排他写锁”实现。
可重复读:在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的。 通过“共享读锁”和“排他写锁”实现。
可串行化:一个事务执行的时候不允许别的事务并发执行。读加共享锁,写加排他锁,读写互斥
事务隔离的实现——锁
共享锁(S锁):用于只读操作(SELECT),锁定共享的资源。共享锁不会阻止其他用户读,但是阻止其他的用户写和修改
更新锁(U锁):用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁
独占锁(X锁,也叫排他锁):一次只能有一个独占锁用在一个资源上,并且阻止其他所有的锁包括共享缩。写是独占锁,可以有效的防止“脏读”