WEB开发网
开发学院数据库MySQL Mysql入门系列:MySQL不支持的功能 阅读

Mysql入门系列:MySQL不支持的功能

 2006-12-31 10:46:16 来源:WEB开发网   
核心提示: ■ 方法2:使用相对更新而不是绝对更新,要解决来自多个事务处理的语句混淆问题,Mysql入门系列:MySQL不支持的功能(4),应消除语句之间的依赖性,虽然这样做并不都总是可能的,在MySQL中,系统崩溃时可通过检查更新日志来判断事务处理的状态,它只针对我们的库存例子可行,对于方法1中所用

■ 方法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中,系统崩溃时可通过检查更新日志来判断事务处理的状态,虽然这可能需要对日志进行某种手工检查。

上一页  1 2 3 4 5 6  下一页

Tags:Mysql 入门 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接