• MySql的触发器


    触发器是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。

    创建MySQL触发器

    在MySQL中,创建只有一个执行语句的触发器的基本形式如下:

    CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句

    具体的参数说明如下:

    触发器名:指定要创建的触发器名字。

    参数BEFORE和AFTER:指定触发器执行的时间。BEFORE指在触发时间之前执行触发语句;AFTER表示在触发时间之后执行触发语句。

    触发事件:指数据库操作触发条件,其中,包括INSERT,UPDATE和DELETE。

    表名:指定触发时间操作表的名称。

    FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器。

    delimiter//
    create trigger auto_save_time before insert
    on studentinfo for each row
        insert into timelog(savetime)values(now());
    //
    在向studentinfo表中插入数据时,savetime表中也会被插入一条当前系统时间的数据。

    创建具有多个执行语句的触发器

    CREATE TRIGGER 触发器名称 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW

    BEGIN

      执行语句列表;

    END

    delimiter//
    create trigger delete_time_info after delete
    on studentinfo for each row
    begin
        insert into timelog(savetime)values(now());
        insert into timeinfo(info)values'deleteact');
    end
    //
    当用户对students表执行DELETE操作时,students数据库中的timelog数据表和timeinfo数据表中分别被插入操作时间和操作信息。

    在MySQL中,一个表在相同的时间和相同的触发时间只能创建一个触发器,如触发时间INSERT,触发时间为AFTER的触发器只能有一个,但是可以定义BEFORE的触发器。

    查看触发器

    在MySQL中,可以执行SHOW TRIGGERS语句查看触发器的基本信息,其基本形式如下:

    SHOW TRIGGERS;

    在命令提示符中输入SHOW TRIGGERS语句即可查看选择数据库中的所有触发器,但是,应用该查看语句存在一定弊端,即只能查询所有触发器的内容,并不能指定查看某个触发器的信息。这样一来,就会在用户查找指定触发器信息的时候带来极大不便。故推荐只在触发器数量较少的情况下应用SHOW TRIGGERS语句查询触发器基本信息。

    查看triggers表中触发器信息

    在MySQL中,所有触发器的定义都存在该数据库的triggers表中。读者可以通过查询triggers表来查看数据库中所有触发器的详细信息。查询语句如下所示:

    SELECT * FROM information_schema.triggers

    其中,information_schema是MySQL中默认存在的库,而information_schema是数据库中用于记录触发器信息的数据表。通过SELECT语句查看触发器信息,如果用户想要查看某个指定触发器的内容,可以通过where子句应用TRIGGER字段作为查询条件。代码如下:

    SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='触发器名称';

    其中,“触发器名称”这一参数为用户指定要查看的触发器名称,和其他SELECT查询语句相同,该名称内容需要用一对“''”(单引号)引用指定的文字内容。

    应用触发器

    在MySQL中,触发器按以下顺序执行:BEFORE触发器、表操作、AFTER触发器操作。其中,表操作包括常用的数据库操作命令如INSERT、UPDATE、DELETE。

    触发器中不能包含START TRANSCATION、COMMIT或ROLLBACK等关键词,也不能包含CALL语句。触发器执行非常严密,每一环都息息相关,任何错误都可能导致程序无法向下执行。由于已经更新过的数据表是不能回滚的,故在设计过程中一定要注意触发器的逻辑严密性。

    删除触发器

    在MySQL中,既然可以创建触发器,同样也可以通过命令删除触发器,即删除原来已经在某个数据库中创建的触发器,与MySQL中删除数据库的命令相似,删除触发器应用DROP关键字。其语法格式如下:

    DROP TRIGGER 触发器名称

    “触发器名称”参数为用户指定要删除的触发器名称,如果指定某个特定触发器名称,MySQL在执行过程中将会在当前库中查找触发器。

     

     

     

     

     

     

     

  • 相关阅读:
    键盘钩子在C#中的设计
    C++基础(学习笔记)
    WinCE5.0移动平台开发笔记(OpenNETCF.Desktop.Communication连接和断开使用心得)
    the underlying connection was closed:the server committed a protocol violation
    WinCE5.0移动平台开发笔记(c#中使用多线程访问winform中控件的若干问题(zt))
    WinCE5.0移动平台开发笔记(.Net主线程扑捉子线程中的异常)
    配置ActiveX控件在网页中下载安装
    C#值类型和装箱
    磁卡、条码卡、IC卡、CPU卡、RFID等常识(zt)
    CAB压缩工具安装(右键生成CAB压缩包)
  • 原文地址:https://www.cnblogs.com/wade-luffy/p/6041873.html
Copyright © 2020-2023  润新知