atomicity原子性
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。
如何保证:
通过redo log来保证,回放redo log
Consistency一致性
数据如果有约束性,那么事务执行前后,数据的约束性还是存在的,并没有破坏掉。比如说转账事务的前后,资金的总数这个约束条件是不会被破坏的
如何保证:
通过undo log,回滚机制来保证
Isolation隔离性
这个是很不好理解的一个含义。我觉得姜承尧老师讲的比较好。
多个事务并行,一个事务所做的更改,不管有没有提交,在并行的另一个事务中都是不可见的,但最后的效果看起来多个并行的事务好像是串行一样
如何保证:
通过lock来保证
* locking (锁)
* concurrency control (并发控制)
* isolation (隔离级别)
* serializability (序列化)
以上四个其实在数据库中讲的是同一个概念; 锁是用来实现并发控制,并发控制用来实现隔离级别,隔离级别是通过锁来控制的,锁的目的为了使得事务之间的执行是序列化的
Duration持久性
一旦事务提交,其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。这个duration指的是mysql服务器可以重启的情况下,crash掉之后(比如说只写到pool buffer中,还没有fsync到磁盘文件中),保证duration。而不是物理损坏,物理损坏由备份来负责的
如何保证:
是通过redo log来保证的。