首页 > 数据库

1.3. 事务

时间:2009-04-16 20:21:25  作者:HopingWhite  我要投稿
Linux初探欢迎您的投稿,投放方法请点击这里查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
1.3. 事务如果不了解事务,你就不可能了解数据库系统的更高级的特性。所谓事务是指,数据库将一组SQL语句当做......

1.3. 事务

如果不了解事务,你就不可能了解数据库系统的更高级的特性。所谓事务是指,数据库将一组SQL语句当做“原子化”来处理,作为一个独立的工作单元。如果数据库引擎可以执行整组的SQL语句,那么它就执行整组语句;如果组中任何一个SQL语句因为某种原因而失败,那么任何一条语句都不会实际生效。这就是“要么全部要么没有”的策略。

本节只有很少的内容是针对MySQL的。如果你已经对ACID事务比较熟悉,那么你可直接跳到“节1.3.4 MySQL中的事务”。

一个银行应用可以作为典型的例子来说明为什么需要事务。设想一个银行的数据库有两张表,checking和savings。从Jane的checking帐户中转200美元到savings帐户中,你可能需要进行至少三步操作:

1、确定她的checking帐户中的余额超过200美元

2、从她的checking帐户中减去200美元

3、给她的savings帐户中增加200美元的余额

整个操作应该被包在一个事务中来执行,这样来看如果其中任何一步失败了整个步骤就可以回滚。

你可以用“START TRANSACTION”语句来开始一个事务,然后要么利用“COMMIT”来将改变的数据持久化,要么利用“ROLLBACK”来放弃前面的操作。因此我们前面提到的事务例子的SQL语句可能如下这样

image

但是事务并不是全部。当数据库服务器在执行第4条语句时出现错误会发生什么事呢?这个谁知道?也许客户正好损失了200美元。如果另外的进程在当前进程执行到第3句和第4句之间的时候把checking帐户的余额全部取走又会发生什么事情呢?那么银行将会在不知情的情况下给用户200美元。

除非系统通过了ACID测试,否则事务就是不完善的。ACID代表Atomicity原子性,Consistency一致性,Isolation隔离性,Durability持久性。这些紧密联系的标准必须为一个表现良好的事务处理系统所遵守:

Atomicity原子性

一个事务必须像一个不可分割的工作单元一样工作,这样一来可以使得整个事务要么被执行要么回滚。当事务是原子的时候,就不存在部分完成的事务,也即“要么全部要么没有”。

如果您需转载 1.3. 事务,请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目热门