引用一段wikipedia中对数据库事务的定义:
A transaction symbolizes a unit of work performed within a database management system (or similar system) against a database, and treated in a coherent and reliable way independent of other transactions. A transaction generally represents any change in database. Transactions in a database environment have two main purposes:
对应的可以理解为:事务是数据库的基本工作单元,它以all-or-nothing的方式执行,让数据库从一个一致的状态转移到另一个一致的状态。即使系统发生故障,未执行完成的事务依然可以正确恢复,而事务之间可以在不同程度上进行隔离,以保证数据的正确性。
事务是为了保证数据库中数据的完整性和正确性。设想没有正确的事务支持,就可能出现A向B转账,A的钱被扣掉,而B却并没收到钱的情况。事务能保证要么A转账成功,或则失败,而A和B的钱的总额保持一致的状态。事务能够为我们的所有操作保证可确定的结果,在这样的前提下,我们才能进行各种各样的操作。
值得一提的时候,对于简单的网页应用,可能其后台仅有一个数据库,是单点的事务。而在更多的生产系统中,数据源往往不只一个,包含不同类型的数据库,MQ等,这个时候还需要分布式事务(XA事务)的支持才能保证正确性,单点的事务往往由数据库等系统本身保证,而分布式事务还需要上层中间件的支持。
事务的几大特性ACID可以说是老生常谈了,这里先列举一下:
下一章将详细解释事务的隔离性。
MySQL是互联网企业中用的最多的数据库,大家都知道使用InnoDB或则BerkeleyDB作为存储引擎才支持事务,之后的章节都将默认以MySQL作为范例,采用InnoDB作为存储引擎。