事务的ACID原则

atomic原子性,事务包含一批读写操作要么都提交,要不都回滚,在并发状态下另一个线程看到的这个线程操作的事务一定是完整的,要不都没看见,要么都看见,不存在看见一半的情况。

consiste一致性,对数字的一组特定的约束条件必须成立,例如转账业务中的进账和出账必须能相抵。但是,一致性的这种概念取决于应用程序对不变量的理解,应用程序负责正确定义它的事务,并保持一致性。这并不是数据库可以保证的事情:如果你写入违反不变量的脏数据,数据库也无法阻止你。

isolation隔离性,隔离性意味着,同时执行的事务是相互隔离的:它们不能相互冒犯。在事务执行时不可避免被多个线程同时操作一条数据,例如一个值做加法,A拿到42,进行加一,在加的过程中B也拿到了42,也进行加一操作,这是A把结果43更新,B也把结果43更新,因为发生了两次增长,值应该从42增至44;但由于竞态条件,实际上只增至 43,如下图 。

传统的数据库教科书将隔离性形式化为可串行化(Serializability),数据库确保当多个事务被提交时,结果需要与它们串行运行(一个接一个)是一样的。

durabulity持久性,事务的完成条件需要包括持久化,也就是在存储中保存,即一旦事务成功完成,即使发生硬件故障或数据库崩溃,写入的任何数据也不会丢失。当然,完美的持久性是不存在的 :如果所有硬盘和所有备份同时被销毁,那显然没有任何数据库能救得了你。

posted @   异人程序员  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示