• mysql复习(1):触发器


    1.定义

    顾名思义,触发就是满足一定条件下产生什么动作,完整的定义是触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。

    2.语法:

    1 CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt

    trigger_name:触发器的名称

    tirgger_time:触发时机,为BEFORE或者AFTER

    trigger_event:触发事件,为INSERT、DELETE或者UPDATE

    tb_name:表示建立触发器的表明,就是在哪张表上建立触发器

    trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句

    可以说MySQL创建以下六种触发器: BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE AFTER INSERT,AFTER DELETE,AFTER UPDATE

    3.牛客笔试题

     1 // 题目:构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。
     2 
     3 CREATE TABLE employees_test( 
     4     ID INT PRIMARY KEY NOT NULL,
     5     NAME TEXT NOT NULL, 
     6     AGE INT NOT NULL,
     7     ADDRESS CHAR(50), 
     8     SALARY REAL 
     9 );
    10 
    11 CREATE TABLE audit(
    12     EMP_no INT NOT NULL, 
    13     NAME TEXT NOT NULL 
    14 );
    1 create trigger audit_log after insert on employees_test for each row begin
    2 insert into audit values(new.id, new.name);
    3 end

    MySQL 中定义了 NEW 和 OLD,用来表示 触发器的所在表中,触发了触发器的那一行数据。

    具体的例子如下:

    在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;

    在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;

    在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;

    使用方法: NEW.columnName (columnName 为相应数据表某一列名)

    4.用法扩展

    BEGIN与END之间的执行语句列表参数表示需要执行的多个语句,不同语句用分号隔开

    tips:一般情况下,mysql默认是以 ; 作为结束执行语句,与触发器中需要的分行起冲突

         为解决此问题可用DELIMITER,如:DELIMITER ||,可以将结束符号变成||

         当触发器创建完成后,可以用DELIMITER ;来将结束符号变成;

    1 DELIMITER ||
    2 create trigger audit_log after insert on employees_test for each row begin
    3 insert into audit values(new.id, new.name);
    4 // 其他语句
    5 end
    6 DELIMITER ;
  • 相关阅读:
    光学字符识别OCR-6 光学识别
    光学字符识别OCR-5 文本切割
    光学字符识别OCR-4
    光学字符识别OCR-3
    leetcode 7 Reverse Integer(水题)
    leetcode 1 Two Sum(查找)
    DFS的简单应用(zoj2110,poj1562)
    Havel-Hakimi定理(握手定理)
    zoj1360/poj1328 Radar Installation(贪心)
    饶毅:做自己尊重的人
  • 原文地址:https://www.cnblogs.com/zhangtu/p/14338300.html
Copyright © 2020-2023  润新知