mysql事务隔离级别实现原理,mysql事务隔离级别查询

  mysql事务隔离级别实现原理,mysql事务隔离级别查询

  MySQL事务隔离级事务由一条或多条SQL语句组成,是最小的不可分割单元。该组中的所有操作要么全部成功,要么全部不成功。如果一次执行不成功,所有执行都将回滚。

  比如你去银行转账,用户用账户A从100元转账到账户B,首先账户A需要扣100元,账户B需要加100元。这两项操作都必须成功完成。如果其中一个操作失败,比如A账户扣100,B账户加100,出现错误,加到A账户的100也会回滚,否则金额不正确。一个事务就是保证两个操作都成功或者不成功。

  事务并发问题脏读

  事务A读取了事务B已经修改但没有提交的数据,此时如果事务B回滚,事务A读取的数据无效,这个数据就是‘脏数据’。交易A根据此数据操作时可能会出错。

  不可靠的阅读

  当事务A读取某个字段时,事务B修改它。当事务A再次读取该字段时,读取的值与第一次读取的值不一致。

  魔法阅读

  事务A查询表中的数据,事务B向表中添加新数据,事务A再次查询表中的数据。两个查询的结果不一致。

  不可重复读数和幻影读数的区别:不可重复读数是用于修改,而幻影读数是用于添加或删除。

  不可重复读取是指两次读取的数据内容不同,魔读是指两次读取的数据数量不同。

  当序列化事务A和事务B同时操作数据时,如果事务A修改了数据但没有提交,事务B要添加、修改或删除数据,必须等待事务A提交后,事务B才能执行。

  事务隔离级别的Read Uncommitted允许事务读取其他事务的未提交数据。事务A可以读取被事务B修改但未提交的数据。隔离级别最低,上面的并发问题还没有解决。

  已提交读取)(Oracle默认)事务只能看到其他事务已提交的数据。事务A只能读取事务B提交的数据。脏读可以避免,不可重复读和幻影读不可避免。

  Repeatable Read)(MySQL默认)确保当一个事务被多次读取时,可以读取相同的值。事务期间,禁止其他事务更新数据。交易A读取商品100的数量。在此期间,禁止交易B更新商品的数量。交易A再次读取商品100的数量。脏读和不可重复读可以避免,但假读无法避免。

  Serializable确保事务读取相同的数据。在事务期间,禁止其他事务添加、更新或删除该表。

  版权归作者所有:原创作品来自博主小二上九8,转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: