📜  如何在sql中设置触发器(1)

📅  最后修改于: 2023-12-03 14:52:52.706000             🧑  作者: Mango

在SQL中设置触发器
什么是触发器

触发器(Trigger)是一种特殊的存储过程,它在指定的操作(例如 INSERT、UPDATE 或 DELETE)被执行前或执行后自动地执行。触发器常常被用来实时监控数据库表的变化,对表进行约束和限制。SQL中支持以下几种触发器操作:

  • BEFORE INSERT
  • AFTER INSERT
  • BEFORE UPDATE
  • AFTER UPDATE
  • BEFORE DELETE
  • AFTER DELETE
如何创建触发器

在SQL中创建一个触发器可以使用CREATE TRIGGER语法。

创建一个简单的触发器

下面是一个较为简单的触发器示例,每当employees表中有一项被删除时,将会向audit_log表中插入一条记录来记录被删除的项。

CREATE TRIGGER employee_delete_audit  
ON employees  
AFTER DELETE  
AS  
BEGIN  
   INSERT INTO audit_log (table_name, action_type)  
   VALUES ('employees', 'delete');  
END;  

以上代码创建了一个名为employee_delete_audit的触发器,在employees表中对一项或多项数据执行DELETE操作后,将插入一条记录到名为audit_log的表中。

为触发器添加条件

你可以使用WHILE语句来为触发器添加条件。下面是一个示例,当employee表中被删除的员工的部门编号是5时,将会向audit_log表中插入一条记录。

CREATE TRIGGER employee_delete_audit  
ON employees  
AFTER DELETE  
AS  
BEGIN  
    DECLARE @dept_id int  
    SELECT @dept_id = i.department_id  
    FROM deleted i;  
    WHILE @dept_id = 5  
    BEGIN  
        INSERT INTO audit_log (table_name, action_type)  
        VALUES ('employees', 'delete');    
        BREAK;  
    END;  
END;  

访问专用表

在触发器的过程中,你可以访问两个专用的表。这两个表是:

  • inserted:对于INSERT触发器而言,其中包含新增的行。
  • deleted:对于DELETE或UPDATE触发器而言,其中包含被删除或被更新的行。

以下是一个示例,每当employee表中增加一名新员工时,将会向audit_log表中插入一条记录,显示该员工的姓名和新增日期。观察以下代码中的inserted表的使用方法。

CREATE TRIGGER employee_audit  
ON employees  
AFTER INSERT  
AS  
BEGIN  
    DECLARE @employee_name varchar(50);  
    DECLARE @added_date datetime;  
    SELECT @employee_name = i.first_name + ' ' + i.last_name,  
        @added_date = i.hire_date  
    FROM inserted i;  
    INSERT INTO audit_log (table_name, employee_name, action_type, action_date)  
    VALUES ('employees', @employee_name, 'insert', @added_date);  
END;  
总结

以上介绍了SQL中如何创建触发器、如何为触发器设置条件、如何访问专用表。可以根据需要随时灵活运用。同时,在创建触发器时应谨慎,以免因触发器实现不当导致数据库性能下降或数据丢失等问题。