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 触发器

    让我们看看如何创建一个后触发器:
    语法:
    
    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) 
    //输出 
    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