MySQL架构 - 事务处理_871
MySQL架构 - 事务处理
事务处理
在事务处理之前,你不能知道数据库系统有如此多的高级功能。一个事物就是一组SQL查询。这一组被 看做是原子的。也就是一个单独的工作单元。如果数据库引擎可以应用整个组的查询,就执行完毕。但是 如果其中一条语句出现问题,整个组的语句都不会被执行。也就是要么全部执行,要么全部不执行。
这部分所讲到的事物很少是针对MySQL的,如果你已经熟悉了ACID事务处理,可以跳过这一部分。 银行的应用是解释为什么需要事务处理的经典案例。假设银行数据有两张
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
。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 )这个词。