数据库ACID及如何保证

事务的属性

原子性(Atomicity):

对数据的操作都视为一个原子一样不可分割,要么全部都执行,要么全部都不执行。当在执行中间过程出现错误的时候,会回滚到事务开始前的状态。

实现:通过undo log,undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

一致性(Consistent):

事务的执行结果必须是从一个一致性状态向另一个一致性状态的变更。比如说,A和B两个人一共有5000元,那么不管A转钱给B,或者B转钱给A,A+B的金额永远是5000。C:一致性(Consistency),在一个事务中,事务前后数据的完整性必须保持一致。

:假设用户A和用户B两者的钱加起来一共是200,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是200,这就是事务的一致性。

如何保证:

通过undo,回滚机制来保证

隔离性(Isolation):

允许多个并发事务同时对数据进行读写和修改的能力,并发执行的多个事务之间相互隔离,不受到其他事务的干扰。

如何保证:

通过给操作的对象加悲观锁或者乐观锁,MVCC(undo log)来保证,RC不满足隔离性,RR满足隔离性

持久性(Durable):

事务完成后,对数据的修改是永久性的。任何事务或故障都不应导致数据丢失。

一旦事务提交,其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。这个duration指的是mysql服务器可以重启的情况下,crash掉之后(比如说只写到pool buffer中,还没有fsync到磁盘文件中),保证duration。而不是物理损坏,物理损坏由备份来负责的

如何保证:

是通过redo来保证的。

你可能感兴趣的:(java永无止境,big,data,数据库,mysql)