zoukankan      html  css  js  c++  java
  • 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 ;
  • 相关阅读:
    开始学习C#
    关于串口数据读取的几个问题
    Joel测试
    VC查找内存泄漏技巧【转】
    思考题一
    自我介绍
    2020面向对象程序设计寒假作业1 题解
    思考题二
    题解 洛谷P2158 【[SDOI2008]仪仗队】
    深入浅出InfoPath系列
  • 原文地址:https://www.cnblogs.com/zhangtu/p/14338300.html
Copyright © 2011-2022 走看看