This Domain(Admin5.com) is for Sale:

My SQL数据库实用技术(19)

时间:2007-12-23  来源:不详  作者:迈克DB

UNLOCK TABLES
t6 现在销售人员2的锁请求成功。销售人员2检索当前衬衫计数( 44)
SELECT quantity FROM inventory WHERE item = "shirt"
t7 销售人员2计算库存的新数目为44 - 2 = 42,设置衬衫计数为4 2,然后释放锁:
UPDATE inventory SET quantity = 42 WHERE item = "shirt"
UNLOCK TABLES
现在来自两个事务处理的语句不混淆了,并且库存衬衫数也正确进行了设置。我们在这里使用了一个WRITE 锁,因为我们需要修改inventory 表。假如只是读取表,可使用READ 锁。当您正在使用表时,这个锁答应其他客户机读取表。在刚才举的例子中,销售人员2大概不会注重到执行速度上的差异,因为其中的事务处理都很短,执行速度很快。但是,作为一个具有普遍意义的规则,那就是应该尽量避免长时间地锁住表。
假如您正在使用多个表,那么在您执行成组查询之前,必须锁住他们。假如只是从某个特定的表中读取数据,那么只需给该表加一个读出锁而不是写入锁。假如有一组查询,其中想对inventory 表作某些更改,而同时需要从customer 表中读取某些数据。在此情形下,inventory 表上需要一个写入锁,而customer 表上需要一个读出锁:
LOCK TABLES inventory WRITE,customer READ

织梦内容管理系统


...
UNLOCK TABLES
这里要求您自己对表进行加锁和解锁。支持事务处理的数据库系统将会自动完成这些工作。但是,在作为一个整体执行的分组语句方面,无论在是否支持事务处理的数据库中都是相同的。
■ 方法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 中,系统崩溃时可通过检查更新日志来判定事务处理的状态,虽然这可能需要对日志进行某种手工检查。
■ 外部键和引用完整性。外部键答应定义一个表中的键与另一个表中的键相关,而引用完整性答应放置对包含外部键的表可以做什么的约束。例如, samp_db 样例数据库的score 表中包含一个student_id 列,我们用它来将学分记录关联到student 表中的学生。score.student_id 将定义为支持此概念的数据库中的一个外部键,我们将在其上加上一条约束,使不能为student 表中不存在的学生输入学分记录。此外,应该答应级联删除,以便假如某个学生从student 表中被删除后,该学生的任何学分记录将会自动地从

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息