mysql隔离级别

 

 

读未提交

  一个事务可以读取到另外一个是事务没有提交的数据,容易产生脏读问题

  例:事务A 添加了数据库user表一条 id=10 的记录,但是没有commit,这时事务B就可以读取到这条记录,然后事务A回滚了,事务B读取的这条id=10的记录不存在就产生了脏读

读提交

  一个事务只能看见其他事务提交后的数据,解决了读未提交的脏读问题,但是可能产生不可重复读的问题

  例:事务A 多次读取id=10的一条数据的过程中,事务B 修改了id=10的数据并提交了,导致 事务A 多次读取的数据不一样

可重读

  解决了脏读不可重复读的问题 同时也会产生幻读的问题

  跟读提交的区别在于:在 事务A 开始时就确定了查询视图,多次查询共享同一个视图 而读提交时 在 事务A 中每查询一次就会创建一个查询视图,也就是当 事务B更新数据库,事务A查询到的还是更新之前事务A开始时的数据

  例:事务A 查询一个id=10的数据时没有找到,这时事务B 查询一条id=10的数据并提交了,事务A 在添加id=10的数据时就报错了,这时就产生了幻读

串行化

  一个事务操作时其他事务必须等待之前的事务操作完成才能操作

 

mysql默认可重复读,事务与事务之间互不干扰

mysql使用redo log日志来保证事务的持久性 即使发生宕机等故障 也能使用redo log日志来提交和回滚

事务当中使用队列 一定要注意执行先后顺序。执行队列查询的时候 事务有可能还没有执行完成

posted @ 2020-08-24 14:01  于是长大了  阅读(49)  评论(0)    收藏  举报