MySQL(九)——如何保证ACID

MySQL如何保证ACID

atomicity原子性

一个事务是不可分割的最小单元,事务中的所有操作要么全部成功,要么全部失败

如何保证:

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

Consistency一致性

数据如果有约束性,那么事务执行前后,数据的约束性还是存在的,并没有破坏掉。比如说转账事务的前后,资金的总数这个约束条件是不会被破坏的

如何保证:

通过undo,回滚机制来保证

Isolation隔离性

多个事务并行,一个事务所做的更改,不管有没有提交,在并发的另一个事务中都是不可见的,但最后的效果看起来多个并行的事务好像是串行一样

如何保证:

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

Duration持久性

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

如何保证:

是通过redo来保证的。

你可能感兴趣的:(MySQL(九)——如何保证ACID)