首页 理论教育MySQL数据库:事务使用的重要性

MySQL数据库:事务使用的重要性

【摘要】:假如有莱钢集团与保利建设两家企业,它们谈成了一笔生意,即保利建设向莱钢采购2亿元的建筑钢材。两家公司都拥有某银行的账户,所以双方财务人员决定通过该银行进行转账。例6.1:执行上述SQL语句,结果如图6.1所示。图6.1莱钢、保利的账户金额现在来模拟转账:将保利建设的余额转账500万到莱钢集团的账户。使用这样的转账软件会让银行严重亏损,甚至破产。解决这一问题,可以使用事务。事务可以将转账所需的两条UPDATE语句当作一个整体。

假如有莱钢集团与保利建设两家企业,它们谈成了一笔生意,即保利建设向莱钢采购2亿元的建筑钢材。但合同要求保利建设需先向莱钢支付500万的预付款,然后才配送钢材。两家公司都拥有某银行的账户,所以双方财务人员决定通过该银行进行转账。下面创建该银行数据库,并创建账户信息表,存放账户信息,具体的T-SQL如例6.1所示。

例6.1:

执行上述SQL语句,结果如图6.1所示。

图6.1 莱钢、保利的账户金额

现在来模拟转账:将保利建设的余额转账500万到莱钢集团的账户。实现转账需要两条UPDATE语句,即莱钢集团的账户增加500万,保利建设的账户减少500万。

模拟转账的语句如例6.2所示。

例6.2:

(www.chuimin.cn)

例6.2中语句执行后第2条语句会出现语法错误,以下是转账结果,如图6.2所示。

图6.2 转账结果

发现转账的结果是:莱钢集团的账户增加了500万变为1000万,而保利建设的账户并没有减少。这时两家公司账户余额总和为1000万,多出了500万。

通过报错的信息可以发现,是因为前面sql语句中出现了语法错误而造成的。转账前两个账户的余额是1000万,转账后变成了1500万,多出了500万。

在实际的开发中肯定不允许出现这样的情况。使用这样的转账软件会让银行严重亏损,甚至破产。

解决这一问题,可以使用事务。事务可以将转账所需的两条UPDATE语句当作一个整体。如果其中任何一条语句出现错误,则整个转账业务失败,两个账户的余额也恢复到原有金额,从而确保转账前后的余额总和不变。

使用事务就可以防止这种错误的发生,事务的作用是:要么所有操作全部完成,要么所有操作全部不执行。这样一来,要么增加和减少的都执行完毕,一旦出错,就回滚到什么都没有执行的状态。