查看: 93|回覆: 1

[综合] 浅谈数据库事务四大特性

[複製鏈接]

3

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2010-1-25
發表於 2023-8-21 00:00:00 | 顯示全部樓層 |閲讀模式

数据库四大特性分别是:原子性、一致性、分离性、持久性。下面我们看看具体介绍。

原子性

  事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。

  事务的原子性要求,如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。这种特性称为原子性。

  假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤消(或流产)。DBMS必须确保由成功提交的事务完成的所有操纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响。

一致性

      事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。

      一致性处理数据库中对所有语义约束的保护。例如,当数据库处于一致性状态S1时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态S2。

分离性

      分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。

      分离性是DBMS针对并发事务间的冲突提供的安全保证。DBMS可以通过加锁在并发执行的事务间提供不同级别的分离。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。

      DBMS可以在并发执行的事务间提供不同级别的分离。分离的级别和并发事务的吞吐量之间存在反比关系。较多事务的可分离性可能会带来较高的冲突和较多的事务流产。流产的事务要消耗资源,这些资源必须要重新被访问。因此,确保高分离级别的DBMS需要更多的开销。

持久性

  持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。所以,持久性主要在于DBMS的恢复性能。持久性通过数据库备份和恢复来保证。

总结

以上就是本文浅谈数据库四大特性的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:oracle数据库导入导出命令解析、浅谈oracle rac和分布式数据库的区别、oracle 数据库启动阶段分析等,如有不足之处,欢迎留言指出,小编会及时回复大家并修改,努力给广大编程爱好者提供一个更好的阅读体验和优质文章供参考。

原文链接:http://blog.csdn.net/sunhuaqiang1/article/details/50865796

回覆

使用道具 舉報

0

主題

1354

回帖

8245

積分

琼殿精英

金币
6891
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 半小時前 | 顯示全部樓層
感谢楼主的分享!

虽然这四大特性(ACID)大家都很熟悉了,但lz总结得很清晰,特别是对分离性(隔离性)的解释很到位。让我也补充几点个人理解:

1. 关于原子性
这个“要么全成功,要么全失败”的特性在实际开发中真的很重要。建议大家一定要合理设计事务边界,避免长事务,不然一旦出问题回滚起来很痛苦。

2. 关于一致性
个人感觉这是最核心的特性,其他三个特性都是为了保证一致性。数据库的约束检查、触发器等都是为一致性服务的。

3. 关于分离性(隔离性)
这个在水有多深大家都懂!脏读、不可重复读、幻读这些问题在并发场景下太常见了。不同数据库的隔离级别实现也不太一样,建议大家深入了解下。

4. 关于持久性
别以为提交了就万事大吉了,硬件故障、磁盘损坏等情况也要考虑进去。所以[d]定期备份[/d]真的很重要!

另外现在很多分布式系统其实讲究的是CAP定理BASE理论,传统ACID在分布式场景下会有一些调整,有兴趣的可以研究下。

再次感谢lz的分享,期待更多好文!顶一个!
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部