MySQL事务介绍及原理

版权声明:只要点赞,这篇文章就是你的。 https://blog.csdn.net/weixin_36691991/article/details/88927382

1 为什么要事务

  事务是一组不可被分割执行的SQL语句集合,如果有必要,可以撤销。银行转账是经典的解释事务的例子。用户A给用户B转账5000元主要步骤可以概括为如下两步。 
  第一,账户A账户减去5000元; 
  第二,账户B账户增加5000元; 
  这两步要么成功,要么全不成功,否则都会导致数据不一致。这就可以用到事务来保证,如果是不同银行之间的转账还需要用到分布式事务。

2 事务的性质

  事务的机制通常被概括为“ACID”原则即原子性(A)、稳定性(C)、隔离性(I)和持久性(D)。 
  原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。 
  稳定性:数据库在事务执行前后状态都必须是稳定的。 
  隔离性:事务之间不会相互影响。 
  持久性:事务执行成功后必须全部写入磁盘。

3 事务隔离性实现原理

  数据库事务会导致脏读、不可重复读和幻影读等问题。 
  脏读:事务还没提交,他的修改已经被其他事务看到。 
  不可重复读:同一事务中两个相同SQL读取的内容可能不同。两次读取之间其他事务提交了修改可能会造成读取数据不一致。 
  幻影数据:同一个事务突然发现他以前没发现的数据。和不可重复读很类似,不过修改数据改成增加数据。 
针对可能的问题,InnoDB提供了四种不同级别的机制保证数据隔离性。 
  事务的隔离用是通过锁机制实现的,不同于MyISAM使用表级别的锁,InnoDB采用更细粒度的行级别锁,提高了数据表的性能。InnoDB的锁通过锁定索引来实现,如果查询条件中有主键则锁定主键,如果有索引则先锁定对应索引然后再锁定对应的主键(可能造成死锁),如果连索引都没有则会锁定整个数据表。 

猜你喜欢

转载自blog.csdn.net/weixin_36691991/article/details/88927382