MySQL 事务ACID特性

1.什么是事务。数据库

事务就是一组原子性的SQL 查询,或者说一个独立的工做单元。若是数据库引擎可以成功的对数据库应用该组查询的所有语句,那么就执行该组查询。安全

2.事务的特性(ACID)并发

原子性(atomicity)

一个事务必须被视为一个不可分割的最小工做单元,整个事务中的全部操做要么所有提交成功,要么所有失败回滚,对于一个事务来讲,不可能只执行其中的一部分操做,这就是事务的原子性。性能

原子性就是要么作,要不不作,里面的SQL 要么都成功,要么都不成功。undo log回滚日志,记录SQL 执行的相关信息,innodb实现回滚靠的是undo logatom

一致性(consistency)

数据库老是从一个一致性的状态转换到另一个一致性的状态。事务最终没有提交下,事务中所作的修改也不会保存到数据库中。
体现数据库完整性没有被破坏,数据先后一致。
A 转帐B 100,结果是 A 少100, B 多100, 先后一致。日志

隔离性(isolation)

一般来讲,一个事务所作的修改在最终提交之前,对其余事务是不可见的。
事务内部的操做与其余的事务是隔离的,并发执行的各个事务之间不能互相干扰。
一个事务写操做对另外一个写操做影响:锁机制保证隔离
一个事务写操做对另外一个读操做影响:MVCC 保证隔离事务

持久性(durability)

一旦事务提交,则其所作的修改就会永久保存到数据库中。此时即便系统崩溃,修改的数据也不会丟失。(就是说事务一旦提交,对数据库的改变是永久的)内存

总结:
一个兼容ACID的数据库系统,须要作不少复杂但可能用户并无觉察到的工做,才能确保ACID的实现就像锁粒度的升级会增长系统开销同样,这种事务处理过程当中额外的安全性,也会须要数据库系统作更多的额外工做。ci

一个实现了ACID的数据库,相比没有实现ACID的数据库,一般会须要更强的CPU处理能力、更大的内存和更多的磁盘空间。用户能够根据业务是
否须要事务处理,来选择合适的存储引擎。对于一些不须要事务的查询类应用,选择个非事务型的存储引擎,能够得到更高的性能。即便存储引擎不支持事务,也能够经过LOCK TABLES语句为应用提供必定程度的保护,这些选择用户均可以自主决定。it

相关文章
相关标签/搜索