通过 DB2 TPC-C 基准实现探索 SQL
2008-09-17 16:31:49 来源:WEB开发网NEW ORDER 事务(本地)
NEW ORDER 事务处理来自一个客户的新订单。这里需要做各种不同的事情:
获取下一个订单 id 和客户所在地区的地区税率。
增加客户所在地区的下一个订单 id,以便用于随后的事务。
对于客户订购的每种产品:
从 ITEM 表检索产品的名称、价格和描述。
从 STOCK 表检索该产品的地区信息和剩下的库存水平。
将该产品的库存水平减去订购的数量。如果库存低于阈值,则应该订购货物(通过简单地增加库存值来实现)。
将获得的相关数据,包括总价格,插入到 ORDER_LINE 中。
将订单插入 ORDERS 和 NEW_ORDER 表。
从 CUSTOMER 检索客户名、折扣、信用信息。
从 WAREHOUSE 检索销售税。
考虑折扣和税,计算总价格。
这是很大的工作量。不过,DB2 使用 SQL 语句来处理所有这些工作。其原理如下:
首先,DB2 处理 DISTRICT 表。这里需要返回数据,并执行更新。经验告诉我们,这需要 2 条 SQL 语句,并且 UPDATE 应该在 SELECT 语句之前执行;否则,当并发增多时,可能会发生死锁。
但是,DB2 支持一种新的 SQL 特性,这种特性正处在标准化的过程中。该特性允许访问触发器中所谓的 过渡表(transition table)。 OLD TABLE 过渡表保存了受影响的行在被 UPDATE 或 DELETE 语句处理之前的初始状态。 NEW TABLE 过渡表保存处理了 INSERT 或 UPDATE 语句之后受影响的行。这是 AFTER 触发器被激发之前的状态。懂得 Microsoft 或 Sybase 的用户可能知道这两个表,在 Microsoft 或 Sybase 中,这两个表的表名是 DELETED 和 INSERTED。
DB2 所做的就是允许 UPDATE、DELETE 和 INSERT 出现在选择语句的 FROM 子句中,并允许用户选择应该从哪个过渡表进行选择:
更多精彩
赞助商链接