zoukankan      html  css  js  c++  java
  • 触发器[Trigger]

    创建触发器语法

    在MySQL中创建触发器通过SQL语句create trigger 来实现其语法形式如下:

    create trigger trigger_name

    BEFORE|AFTER trigger_EVENT

    ON TABLE_NAME FOR EACH ROW trigger_STMT

           主要参数说明:

    trigger_name:表示要创建的触发器名称。
    
    BEFORE:“在……之前” 指定触发器的执行时间。
    
    AFTER:“在……之后” 指定触发器的执行时间。
    
    trigger_EVENT:表示触发器执行条件,包含“deleteinsertupdate”语句。
    
    TABLE_NAME:表示触发事件操作表的名字
    
    FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器。
    
    trigger_STMT:表示激活触发器后被执行的语句。

    1:在学生管理库中,当向学生表添加一条学生信息时,同时还需要更新班级表中的班级人数,具体代码如下:

    show databases;
    
    use 学生管理
    
    show tables;
    
    desc 学生表;
    
    desc 班级表;
    
    create trigger trig_班级人数1
    
     after insert on 学生表 for each row  //只要往学生表中插入数据就会触发触发器
    
     update 班级表 set 班级人数=班级人数+1;

    查看学生表插入记录前检查原有人数:

    select * from 班级表;

     

    再插入数据查看

    insert into 学生表
    
    values('张伟','B01','','19901010','南昌市');
    
    select * from 班级表;

    查询结果显示insert触发器已经成功执行!

    2:在学生管理中,删除学生表中的一条学生信息时,同时还需要更新班级表中的班级数,具体代码如下:

    create trigger trig_班级人数2
    
      after delete on 学生表 for each row
    
     update 班级表 set 班级人数=班级人数-1;

    注:验证方法与前面相同

    创建多条执行语句触发器:(要求截图)

    3:创建触发器实现向专业表插入记录时,就会在插入之后向日志表插入两条记录。

    创建日志表
    
    create table 日志表(
    
    日志编号 int primary key auto_increment,
    
    名称 varchar(20),
    
    记录时间 datetime
    
    );
    
    desc 专业表;
    
    desc 日志表;

    创建触发器:

    delimiter $$//结束符号设置为“$$”
    
     create trigger tri_记录时间
    
     after insert on 专业表 for each row
    
     begin
    
     insert into 日志表 values(null,'专业表',now());                                                                            
    
     insert into 日志表 values(null,'专业表',now());
    
     end
    
    $$
    
    delimiter ; //结束符号设置为“;”

    验证:

    use 学生管理
    
    insert into 专业表
    
    values('01','计算机系');
    
    select * from 日志表;

    执行结果显示,在向专业表插入数据之后,会向日志表中插入两条记录,从而可以发现    tri_记录时间触发器创建成功!

     

    1. 1.  查看触发器
    Show triggers;
    
    Show triggers G
    1. 2.  通过查看系统表triggers实现查看触发器
    Use information_schema;
    
    Select * from triggers G
    1. 3.  删除触发器
    Drop trigger trigger_name;

    简述触发器的基本概念?

    触发器是用来实现由一些表事件触发的某个操作,是与数据库对象表关联最紧密的数据库对象之一。

    简述触发器的主要作用?

    1.安全性。能够基于数据库的值使用户具有操作数据库的某种权利。
       能够基于时间限制用户的操作,比如不同意下班后和节假日改动数据库数据。
       能够基于数据库中的数据限制用户的操作,比如不同意股票的价格的升幅一次超过10%。
    2.审计。能够跟踪用户对数据库的操作。   
        审计用户操作数据库的语句。
        把用户对数据库的更新写入审计表。
    3.实现复杂的数据完整性规则
      # 实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的限制。与规则不同触发器能够引用列或数据库对象。比如,触发器可回退不论什么企图吃进超过自己保证金的期货。
      # 提供可变的缺省值。
    4.实现复杂的非标准的数据库相关完整性规则。触发器能够对数据库中相关的表进行连环更新。比如,在auths表author_code列上的删除触发器可导致对应删除在其他表中的与之匹配的行。
       在改动或删除时级联改动或删除其他表中的与之匹配的行。
       在改动或删除时把其他表中的与之匹配的行设成NULL值。
       在改动或删除时把其他表中的与之匹配的行级联设成缺省值。
       触发器可以拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当插入一个与其主健不匹配的外部键时,这样的触发器会起作用。比如,可以在books.author_code 列上生成一个插入触发器,假设新值与auths.author_code列中的某值不匹配时,插入被回退。
    5.同步实时地复制表中的数据。
    6.自己主动计算数据值,假设数据的值达到了一定的要求,则进行特定的处理

    创建触发器失败的主要原因?

       创建语句错误

       触发器选项错误

    delimiter的含义是什么?在什么情况下使用它?

    修改系统结束符,使用插入数据的情况下使用

    trigger_EVENT参数表示什么?它包含哪些语句?

    表示触发器执行条件,包含“delete,insert,update”语句。

  • 相关阅读:
    strpbrk函数
    memchr函数
    memset函数
    strrev函数
    strncmp函数
    strset函数
    strtok函数
    计算机经典书籍之程序设计语言
    spring自定义bean的作用域
    lucene文章
  • 原文地址:https://www.cnblogs.com/Jackbk/p/12692233.html
Copyright © 2011-2022 走看看