• mysql——触发器——前期整理笔记00


    一、触发器
    
    触发器是由事件来出发某个动作。这些事件包括insert语句、update语句和delete语句。
    
    当数据库系统执行这些事件时,就会激活触发器执行相应得动作。
    
    触发器是有insert、update、delete等事件来触发某种特定动作。满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。
    
    这样做可以保证某些操作之间的一致性.
    
    
    1、创建只有一个执行语句的触发器
    
    语法格式:
    
    
             create trigger 触发器名 before|after 触发事件
    
             on 表名 for each row 执行语句
    
    
    触发器名参数指要创建的触发器的名字;
    
    before和after参数指定了触发器执行的时间;
    
       before指在触发事件之前执行触发语句;
    
       after指在触发事件之后执行触发语句;
    
    触发事件指触发的条件,其中包括insert、updatedelete;
    
    表名指触发事件操作的表的名称;
    
    for each row表示任何一条记录上的操作满足触发条件都会触发该触发器;
    
    执行语句指触发器被触发后执行的程序;
    
    
    举例:
    
    create trigger dept_trig1 before insert
    
    on department for each row
    
    inert into trigger_time values(now());
    
    注释:当向department表中执行insert操作时,数据库系统都会在insert语句执行之前向trigger_time表中插入当前时间;
    
    
    2、创建有多个执行语句的触发器
    
    
    语法格式:
    
    
             create trigger 触发器名 before|after 触发事件
    
             on 表名 for each row 
    
    
             begin
    
                    执行语句列表
    
             end
    
    
    
    
    执行语句列表表示需要执行的多个执行语句的内容,不同执行语句之间用分好隔开;
    
    
    注意:
    
    一般情况下,MYSQL默认的是以“;”作为结束执行语句。在创建触发器的过程中,需要用到“;”为了解决这个问题可以用delimiter语句
    
    如“delimiter &&”可以将结束符号变为“&&”。当触发器创建完成之后,可以用命令“delimiter ;”来将结束符号变为“;”。
    
    
    举例:
    
    
    delimiter &&
    
    create trigger dept_trig2 aftrer delete
    
    on department for each row
    
    begin
           insert into trigger_time values('21:01:01');
           insert into trigger_time values('22:01:01');
    end
    
    &&
    
    delimiter;
    
    
    注意:在MYSQL中,一个表在相同的触发时间,只能创建一个触发器;
    
    
    3、查看触发器
    
    (1)show triggers语句查看触发器信息
    
    语法格式:show triggers;
    
    注释:其结果显示了所有触发器的基本信息,但是该语句无法查询指定的触发器信息,只能查询所有的触发器信息,适合触发器较少时使用
    
    
    
    (2)在triggers表中查看触发器信息
    
    在MYSQL中,所有触发器的定义都存储在information_schema数据库下的triggers表中,
    
    查询triggers表,可以查看到数据库中所有触发器的详细信息;
    
    语法格式:select * from information_schema.triggers;
    
    
    同时该方法可以查询指定触发器的详细信息。
    
    语法格式:select * from information_schema.triggers where trigger_name='触发器名';
    
    
    
    4、触发器的使用
    
    before在触发事件之前执行,after在触发事件之后执行;
    
    注意:触发器中不能包含start transaction、commit或者rollback等关键词,也不能包含call语句。
    
    
    
    5、删除触发器
    
    语法格式:drop trigger 触发器名;

    ======================================================


    create trigger 触发器名 before| after 触发事件
    on 表名 for each row

    执行语句;

    delimiter &&
    create trigger 触发器名 before| after 触发事件
    on 表名 for each row
    begin
    执行语句列表
    end
    &&
    delimiter;


    触发事件是指触发条件,包括insert、update、delete;

    表名指触发事件操作的表的名称;


    =====================================================================================================================
    =====================================================================================================================

    create table employee ( num int(50),
    d_id int(50),
    name varchar(50),
    age int(50),
    sex varchar(50),
    homeadd varchar(50)
    );

    insert into employee values(1,1001,'zhangsan',26,'nan','beijing');
    insert into employee values(2,1001,'lisi',24,'nv','hunan');
    insert into employee values(3,1002,'wangwu',25,'nan','jiangsu');
    insert into employee values(4,1004,'aric',15,'nan','yingguo');

    select * from employee;

    create table department ( d_id int(50),
    d_name varchar(50),
    functione varchar(50),
    address varchar(50)
    );

    insert into department values(1001,'keyanbu','yanfachanpin','3lou5hao');
    insert into department values(1002,'shengchanbu','shengchanchanp','5louyiceng');
    insert into department values(1003,'xiaoshoubu','cehuaxiaoshou','1louxiaoshoudating');

    select * from department;

    ==========================================================================================

    select * from employee;

    select * from department;

    ==========================================================================================


    create table trigger_time ( exec_time varchar(50)
    );


    select now();

    create trigger dept_trig1 before insert on department for each row insert into trigger_time values ( now() );

    delete from department where d_id = 1003;


    select * from department;


    select * from trigger_time;

    insert into department values(1003,'xiaoshoubu','cehuaxiaoshou','1louxiaoshoudating');


    select * from trigger_time;

    =================================================================================================================

    select * from employee;


    select * from department;

    create table trigger_time1 ( exec_time varchar(50)
    );

    select now();

    select * from trigger_time1;

    delimiter &&
    create trigger dept_trig2 after delete on department for each row
    begin
    insert into trigger_time1 values ( now() );
    insert into trigger_time1 values ( now() );
    end
    &&
    delimiter;

    select * from trigger_time1;

    delete from department where d_id = 1003;

    select * from trigger_time1;

    =================================================================================

    =================================================================================
    查看触发器

    1、查看数据库中所有触发器的信息:

    show triggers;


    2、在triggers表中查看触发器信息

    mysql中所有触发器的定义都存在information_schema数据库下的triggers表中,查询triggers表,可以查询数据库中所有触发器的详细信息

    select * from information_schema.triggers; /*查询所有*/


    select * from information_schema.triggers where trigger_name = 'dept_trig1'; /*单个指定查询*/


    注意:在激活触发器时,对触发器中的执行语句存在一些限制。而且触发器有问题,会阻止程序向下执行,而且数据不能回滚。


    3、删除触发器

    drop trigger 触发器名;

    select * from information_schema.triggers;


    drop trigger dept_trig1;

    drop trigger dept_trig2;

    ================================================================================================================================




  • 相关阅读:
    架构之美阅读笔记05
    架构之美阅读笔记04
    已经导入到VS工具箱中的DevExpress如何使用
    C#中遇到的方法总结
    vs下C# WinForm 解决方案里面生成的文件都是什么作用?干什么的?
    ssh关于含有外键的传值中无法识别正确的action的原因和解决办法
    MVC模式在Java Web应用程序中的实例分析
    浅谈对MVC的理解
    简述23种设计模式
    浅谈对可用性和易用性的认识以及对如何增加系统功能的理解
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/12093524.html
Copyright © 2020-2023  润新知