MySQL事务知识要点(一)
MySQL事务
在用户操作MySQL过程中,对于一般简单的业务逻辑或中小型程序而言,无需考虑应用MySQL事务。但在比较复杂的情况下,往往用户在执行某些数据操作过程中,需要通过一组SQL语句执行多项并行业务逻辑或程序,必须保证所用命令执行的同步性。使执行序列中产生依靠关系的动作能够同时操作成功或同时返回初始状态。在此情况下,就需要用户优先考虑使用MySQL事务处理。
在MySQL中,事务由单独单元的一个或多个SQL语句组成。在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事务开始以前的状态;如果单元中的所有SQL语句均执行成功,则事务被顺利执行。
通过一个简单的例子来理解事务:向公司中添加一名新的雇员。这个过程由三个步骤组成:在雇员数据库中为雇员创建一条新记录;为新雇员分配分配部门;建立他的工资和奖金记录。如果这三部中任何一步失败,如为新成员分配的雇员ID已经被其他人使用或者输入到工资系统中的值太大,系统就必须撤销在此之前所有的变化,删除所有不完整记录的痕迹,避免以后的不一致和计算错误。
MySQL事务的ACID属性
每个事务的处理必须满足ACID原则
(1)原子性
原子性意味着每个事务都必须被看作是一个不可分割的单元。假设一个事务由两个或多个任务组成,其中的语句必须同时成功才能认为整个事务是成功的。如果事务失败,系统会返回该事务以前的状态。在添加雇员这个例子中,原子性指如果没有创建雇员相应的工资表和部门记录就不可能向雇员数据库添加雇员。
(2)一致性
不管事务是完全成功还是中途失败,当事务使系统处于一致的状态时存在一致性。参照前面的例子,一致性是指如果从系统删除了一个雇员,则所有和该雇员相关的数据,包括工资数据和组的成员资格也要被删除。
(3)隔离性
隔离性是指每个事务在它自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在她完全被执行时才能看到。即使在这样的一个系统中同时发生了多个事务,隔离性原则保证某个特定事务在完全完成之前,其结果是看不见的。
(4)持久性
持久性是指即使系统崩溃,一个提交的事务仍然存在。当一个事务完成,数据库的日志已经被更新时,持久性就开始发生作用。大多数RDBMS产品通过保存所有行为的日志来保证数据的持久性,这些行为是指在数据库中以任何方法更改数据。数据库日志记录了所有对于表的更新、查询、报表等。如果系统崩溃或者数据存储介质被破坏,通过使用日志,系统能够恢复在重启前进行的最后一次成功的更新,反映了在崩溃时处于过程的事务的变化。