SQL触发器

SQL触发器,触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。触发器可以与特定表上的INSERT、UPDATE和DELETE操作(或组合)相关联。

与存储过程不一样(存储过程只是简单的存储SQL语句),触发器与单个的表相关联。与Orders表上的INSERT操作相关联的触发器只在Orders表中插入行时执行。类似地,Customers表上的INSERT和UPDATE操作的触发器只在表上出现这些操作时执行。

触发器内的代码具有以下数据的访问权:

  • INSERT操作中的所有新数据;
  • UPDATE操作中的所有新数据和旧数据;
  • DELETE操作中删除的数据。

根据所使用的DBMS的不同,触发器可在特定操作执行之前或之后执行。

下面是触发器的一些常见用途:

  • 保证数据一致。例如,在INSERT或UPDATE操作中将所有州名转换为大写。
  • 基于某个表的变动在其他表上执行活动。例如,每当更新或删除一行时将审计跟踪记录写入某个日志表。
  • 进行额外的验证并根据需要回退数据。例如,保证某个顾客的可用资金不超限定,如果已经超出,则阻塞插入。
  • 计算计算列的值或更新时间戳。

读者可能已经注意到了,不同DBMS的触发器创建语法差异很大,更详细的信息请参阅相应的文档。

下面的例子创建一个触发器,它对所有INSERT和UPDATE操作,将Customers表中的cust_state列转换为大写。

这是本例子的SQL Server版本。

    CREATE TRIGGER customer_state
    ON Customers
    FOR INSERT, UPDATE
    AS
    UPDATE Customers
    SET cust_state = Upper(cust_state)
    WHERE Customers.cust_id = inserted.cust_id;

这是本例子的Oracle和PostgreSQL的版本:

    CREATE TRIGGER customer_state
    AFTER INSERT OR UPDATE
    FOR EACH ROW
    BEGIN
    UPDATE Customers
    SET cust_state = Upper(cust_state)
    WHERE Customers.cust_id = :OLD.cust_id
    END;

提示:约束比触发器更快
一般来说,约束的处理比触发器快,因此在可能的时候,应该尽量使用约束。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

SQL教程