扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
首先,触发器是与表相关联的对象,它定义了一些在 INSERT、UPDATE 或者是 DELETE 时自动发生的操作。下面是一些可能需要用到触发器的例子:
1.当插入时,在允许插入操作发生之前验证或者操纵数据。
2.当更新时,通过比较新值与原值来验证操作的正确性。如果您用表中的一列来存储状态信息并且希望定义有效的状态转换时,这样做特别有用。
3.执行删除操作之后,自动地将日志信息插入另一个用于审计追踪的表中。
触发器能在数据库层面上可用于集中业务规则的实施,使所有的应用程序和用户不必再去检查数据的有效性。同样地,如果业务规则发生改变,这些改变在数据库层上就被集中了,而不需要通过所有正在执行的应用程序来传播。
例子
为了说明上述功能,下面的例子为一个虚构的饰品公司的数据库创建表和触发器,该数据库保存了公司的订单和客户信息。要求实施以下业务规则:
1.当该饰品公司接到订单时,订单的价格和客户未结帐的物料清单价格的总和不能超过提供给该客户的赊购最高限额。
2.一份订单可以有几种状态:PENDING、CANCELLED、SHIPPED、DELIVERED 和 COMPLETED。只有以下状态转换才是合法的:
|
3.只有当订单被取消后才能删除。同时,我们也要将删除的订单的信息记录到另一表中以备审计之用。
我们将定义下面的表来说明这个例子。
create table customer_t (
cust_id INT NOT NULL PRIMARY KEY,
company_name VARCHAR(100),
credit DECIMAL(10,2))
create table product_t (
product_id INT NOT NULL PRIMARY KEY,
product_name VARCHAR(100))
create table orders_t (
order_id INT NOT NULL PRIMARY KEY,
cust_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
status CHAR(9) NOT NULL,
FOREIGN KEY (cust_id) REFERENCES customer_t,
FOREIGN KEY (product_id) REFERENCES product_t)
create table delete_log_t (
Text varchar(1000))
我们还将定义以下序列对象(DB2 UDB 7.2 中新增的)来生成唯一的 ID:
create sequence cust_seq
create sequence prod_seq
create sequence ord_seq
接下来,我们将插入下列数据:
insert into customer_t values
(NEXTVAL FOR cust_seq, 'Nancys Widgets', 100)
insert into product_t values
(NEXTVAL FOR prod_seq, 'Blue Widgets')
最后,我们将创建触发器来实施前面定义的业务逻辑,并解释该过程。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者