您的位置:首页 > 数据库 > MySQL

mysql事务介绍及原理

2018-02-23 08:50 274 查看

1 为什么要事务

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

2 事务的性质

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

3 事务隔离性实现原理

  数据库事务会导致脏读、不可重复读和幻影读等问题。
  脏读:事务还没提交,他的修改已经被其他事务看到。
  不可重复读:同一事务中两个相同SQL读取的内容可能不同。两次读取之间其他事务提交了修改可能会造成读取数据不一致。
  幻影数据:同一个事务突然发现他以前没发现的数据。和不可重复读很类似,不过修改数据改成增加数据。
针对可能的问题,InnoDB提供了四种不同级别的机制保证数据隔离性。

  事务的隔离用是通过锁机制实现的,不同于MyISAM使用表级别的锁,InnoDB采用更细粒度的行级别锁,提高了数据表的性能。InnoDB的锁通过锁定索引来实现,如果查询条件中有主键则锁定主键,如果有索引则先锁定对应索引然后再锁定对应的主键(可能造成死锁),如果连索引都没有则会锁定整个数据表。
事务的实例(转账)请参考:https://www.cnblogs.com/ivanpan/p/6653990.html
                 (订单)请参考:http://blog.csdn.net/dreamvyps/article/details/50325967
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MySQL 事务