加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL架构 - 事务处理

发布时间:2016-09-07 01:34:37 所属栏目:MySql教程 来源:站长网
导读:事务处理 在事务处理之前,你不能知道数据库系统有如此多的高级功能。一个事物就是一组SQL查询。这一组被 看做是原子的。也就是一个单独的工作单元。如果数据库
事务处理

在事务处理之前,你不能知道数据库系统有如此多的高级功能。一个事物就是一组SQL查询。这一组被 看做是原子的。也就是一个单独的工作单元。如果数据库引擎可以应用整个组的查询,就执行完毕。但是 如果其中一条语句出现问题,整个组的语句都不会被执行。也就是要么全部执行,要么全部不执行。

这部分所讲到的事物很少是针对MySQL的,如果你已经熟悉了ACID事务处理,可以跳过这一部分。

银行的应用是解释为什么需要事务处理的经典案例。假设银行数据有两张表。checking以及savings. 从Jane的checking账户转账200到她的saving账户。至少要三步

确定她的checking账户至少有200

从checking账户扣除200

把200添加到她的savings账户中。

整个操作封装为了一个事物。因此其中一个操作失败,整个操作都会回滚。

开始一个事物的语句是START TRANSACTION以及修改成功用COMMIT或者放弃改变用ROLLBACK。因此这个 例子的SQL语句如下

Sql代码

START TRANSACTION;
SELECT balance FROM checking WHERE customer_id = 10233276;
UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
UPDATE savings  SET balance = balance + 200.00 WHERE customer_id = 10233276;
COMMIT;

但是单独的事物并不能代表全部。如果在数据库服务器在执行到第四行的时候挂掉呢?用户可能就白 白损失了200。以及如果有个处理出现在了3,4行之间,而不会去扣除checking帐户的余额。那么银行就白 白给了用户200.

在系统没有通过ACID的测试之前,仅仅有事物还是不够的。ACID的意思是原子性(Atomicity)、一致 性(Consistency)、隔离性(Isolation)、持久性(Durability)。这些都是一个好的事务处理系统所 要遵循的标准。

原子性(Atomicity):

一个事物必须做为一个单独不可分割的工作单元来运行。因此整个事物要么全部成功要么全部失败。 当事物具有原子性的时候,不能一部分的执行。要么全部执行,要么全部失败。

一致性(Consistency):

数据库应该总是从一个一致的状态到另一个。在我们的例子中,一致性要确保程序在3,4行崩溃并不会 使checking帐户减少200。因为事物没有提交。数据库没有任何变化。

隔离性(Isolation):

当这个事物没有完成的时候,它的结果对于其他的事物是不可见的。这点确保了在运行完第3行,以及 在第4行之前。200还是在checking帐户中。当我们讨论隔离性的时候,我们常常用到不可见(invisible )这个词。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读