ACID指出每个事务型RDBMS必须遵守的4个属性,即原子性、一致性、孤立性和持久性。
原子性
这就类似与化学中的原子,事务也具备整体性和不可分割性,被认为是一个不可分割的单元。假设一个事务由多种任务组成,其中的语句必须同时操作成功,才可以认为事务是成功的,否则将回滚到初始状态。从上面网上交易的例子可以看出,所有操作的成功是保证交易完成的前提条件,当任何一个环节出现问题时,就导致事务回滚,不能正常完成交易过程。即所有事务共同进退,保证了事务的整体性,这就是事务的原子性。
原子的执行是一个全部发生或全部失败的整体过程。在一个原子操作中,如果事务中的任何一条语句失败,前面执行的语句都将被返回,以保证数据的整体性不被破坏。这在常用的系统应用中,为保证数据的安全性起到一定作用。
一致性
在MySQL事务处理过程中,无论事务是完全成功或是在中途因某些环节失败而导致失败,但事务使系统处于一致的状态时,其必须保证一致性。如在网上进行转账操作的过程中,用户A向用户B的账户中转入5 000元,但用户B在查询转账信息的时候,发现自己的账户中只增加了3 000元,这样不能使整个事务达到一致性。例如,从上述网上交易的例子考虑,当交易完成后,商家的货物会减少,不可能出现当商家给用户发货后货物数量不变,而用户收到货物不增加的情况。
在MySQL中,一致性主要由MySQL的日志机制处理,它记录数据库的所有变化,为事务回复提供跟踪记录。如果系统在事务处理中间发生错误,MySQL恢复过程将使用这些日志发现事务是否已经完全成功执行或需要返回。一致性属性保证数据库从不返回一个未处理的事务。
孤立性
孤立性是指每个事务在自己的空间发生,与其他发生在系统中的事务隔离,而且事务的结果只在它完全被执行时才能看到。即使这样的一个系统中同时发生多个事务,孤立性也可以保证特定的事务在完成之前,其结果是不被公布的。
当系统支持多个同时存在的用户和连接时,系统必须遵守孤立性原则,否则在执行过程中可能导致大量数据被破坏,孤立性保证每个事务完整地在其各自的空间内被顺利执行,保证事务与事务之间不会相互冲突。
持久性
在MySQL中,即便是数据库系统崩溃,一个被提交的事务仍然在坚持。当一个事务完成,数据库的日志已经被更新时,持久性即可发挥其特有功效。在MySQL中,如果系统崩溃或者数据存储介质被破坏,通过使用日志,系统能够恢复在重启前进行的最后一次成功更新,可以反映系统崩溃时处于执行过程的事务的变化。
MySQL的持久性是通过一条记录事务过程中系统变化的二进制事务日志文件来实现的。如果遇到硬件损坏或者系统的异常关机,系统在下一次启动时,通过使用最后的备份和日志就可以恢复丢失数据。
说明
默认情况下,InnoDB表持久性最久,MyISAM表提供部分持久。