MySQL架构 - 事务处理
事务处理
在事务处理之前,你不能知道数据库系统有如此多的高级功能。一个事物就是一组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 )这个词。 (编辑:滁州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |