您当前的位置: 首页 >  sql

壹小俊

暂无认证

  • 2浏览

    0关注

    885博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL事务介绍及原理

壹小俊 发布时间:2019-03-31 13:06:10 ,浏览量:2

1 为什么要事务

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

2 事务的性质

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

3 事务隔离性实现原理

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

关注
打赏
1664335782
查看更多评论
立即登录/注册

微信扫码登录

0.0399s