数据库的事务ACID特性以及MySQL如何保持事物特性

数据库的ACID特性

1、原子性(Atomicity)
  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

2、一致性(Consistency)
  一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
  
3、隔离性(Isolation)
  隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
 
4、持久性(Durability)
  持久性是指一个事务一旦被提交,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

事务的提交:COMMIT

事务的回滚:ROLLBACK

事务的关闭:CLOSE

默认情况下一个SQL语句为一个事务。

如何保持事物的ACID特性

1,一致性

(1)从数据库层面说,事物的一致性其实是事物的目的,通过隔离性持久性原子性三个方法来保证事物的一致性,其中一个特性无法保证的话,那么一致性也无法保证。
(2)从应用层面,通过代码判断数据库数据是否有效,然后决定回滚还是提交数据。

2,原子性

通过undo log名为回滚日志,是实现原子性的关键,当事务回滚时能够撤销所有已经成功执行的sql语句,他需要记录你要回滚的相应日志信息。undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

3,持久性

通过在事物提交前直接把数据写入磁盘。

但是这样存在一些问题,比如只需要修改一个页面的一个字节,就要刷新整个磁盘,浪费资源,或者一个事物的sql语句牵扯到多个数据页,修改起来速度很慢。
因此采用redo log解决以上问题,在进行修改操作时,不仅在内存中修改,在redo log中也记录每次的修改操作,事物提交时候,将redo log日志进行刷盘(redo log日志一部分在内存中,一部分在磁盘中),当数据库宕机重启时,会将redo log中的内容恢复到数据库中,再根据undo logbin log内容觉得回滚数据还是提交数据。使用redo log效率高,因为只记录某一页的修改内容,体积小,顺序上是以末尾进行追加,属于顺序IO,比随机IO效率更快。

4, 隔离性

通过锁和mvcc机制(多版本并发控制)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值