Mysql入门系列:MySQL不支持的功能
2006-12-31 10:46:16 来源:WEB开发网■ 方法2:使用相对更新而不是绝对更新。要解决来自多个事务处理的语句混淆问题,应消除语句之间的依赖性。虽然这样做并不都总是可能的,它只针对我们的库存例子可行。对于方法1中所用的库存更新方法,其中事务处理需要查看当前库存数目,并依据销售衬衫的数目计算新值,然后更新衬衫的数目。有可能通过相对于当前衬衫数目进行计数更新,在一个步骤中完成工作。如下所示:
t1销售人员1卖出3件衬衫
t2 销售人员1将衬衫计数减3:
UPDATE inventory SET quantity = quantity - 3 WHERE item = "shirt"
t3 销售人员2卖出2件衬衫
t4 销售人员2将衬衫计数减2:
UPDATE inventory SET quantity = quantity - 2 WHERE item = "shirt"
因此,这里根本不需要多条语句的事务处理,从而也不需要锁住表以模拟事务处理功能。如果所使用的事务处理类型与这里类似,那么就可以不用事务处理也能完成工作。上面的例子说明了在特殊情形下怎样避免对事务处理功能的需求。但这并不是说不存在那种确实需要事务处理功能的场合。典型的例子是财务转账,其中钱从一个账户转到另一个账户。假如Bill 给Bob 开了一张$100 的支票,Bob 兑现了这张支票。Bill 的户头上应该减掉$100 而Bob 的户头上应该增加相同数量的钱:
UPDATE account SET balance = balance -100 WHERE name = "Bill"
UPDATE account SET balance = balance +100 WHERE name = "Bob"
如果在这两条语句执行中,系统发生了崩溃,此事务处理就不完整了。具有真正事务处理和提交/回退功能的数据库系统能够处理这种情况(至少从理论上能够处理。您可能仍然必须判断遇到了哪些事务处理并重新发布它们,但至少不会担心事务只处理了一半)。在MySQL中,系统崩溃时可通过检查更新日志来判断事务处理的状态,虽然这可能需要对日志进行某种手工检查。
更多精彩
赞助商链接