DB2 - 触发器



本章描述触发器,其类型,以及触发器的创建和删除。

介绍

触发器是一组动作,这些动作用于响应数据库中指定表上的 INSERT、UPDATE 或 DELETE 操作。触发器一次性存储在数据库中。它们处理数据的治理。它们可以被多个应用程序访问和共享。使用触发器的优点是,如果应用程序需要进行任何更改,则可以在触发器处进行更改;而不是更改每个访问触发器的应用程序。触发器易于维护,并且可以加快应用程序的开发速度。触发器使用 SQL 语句“CREATE TRIGGER”定义。

触发器的类型

触发器有两种类型

1. BEFORE 触发器

它们在任何 SQL 操作之前执行。

2. AFTER 触发器

它们在任何 SQL 操作之后执行。

创建 BEFORE 触发器

让我们看看如何创建一个触发器序列

语法

db2 create sequence <seq_name> 

示例:为 shopper.sales1 表创建一个触发器序列

db2 create sequence sales1_seq as int start with 1 increment by 1 

语法

db2 create trigger <trigger_name> no cascade before insert on 
<table_name> referencing new as <table_object> for each row set 
<table_object>.<col_name>=nextval for <sequence_name> 

示例:为 shopper.sales1 表创建触发器以自动插入主键编号

db2 create trigger sales1_trigger no cascade before insert on 
shopper.sales1 referencing new as obj for each row set 
obj.id=nextval for sales1_seq

现在尝试插入任何值

db2 insert into shopper.sales1(itemname, qty, price) 
values('bicks', 100, 24.00) 

从表中检索值

让我们看看如何从表中检索值

语法

db2 select * from <tablename>

示例:

db2 select * from shopper.sales1

输出:

  ID       ITEMNAME       QTY 
-------  ------------   ---------- 
    3      bicks            100 
    2      bread            100 
  
  2 record(s) selected. 

创建 AFTER 触发器

让我们看看如何创建一个 AFTER 触发器

语法

db2 create trigger <trigger_name> no cascade before insert on 
<table_name> referencing new as <table_object> for each row set
 <table_object>.<col_name>=nextval for <sequence_name> 

示例:[插入和检索值]

db2 create trigger sales1_tri_after after insert on shopper.sales1 
for each row mode db2sql begin atomic update shopper.sales1 
set price=qty*price; end  

输出

//inseting values in shopper.sales1 
db2 insert into shopper.sales1(itemname,qty,price) 
values('chiken',100,124.00) 
//output 
ID    ITEMNAME       QTY         PRICE 
----- -------------- ----------- -----------                      
    3 bicks          100         2400.00 
    4 chiken         100         12400.00 
    2 bread          100         2400.00 

	3 record(s) selected. 

删除触发器

以下是数据库触发器的删除方法

语法

db2 drop trigger <trigger_name>  

示例

db2 drop trigger slaes1_trigger   
广告