zoukankan      html  css  js  c++  java
  • MySQL-快速入门(10)触发器

    1、什么是触发器

      触发器是与表有关的命名数据库对象。触发器由事件来触发某个操作。

      触发器是特殊的存储过程,触发器不需要call语句来调用,也不需要手工启动,只需要确定一个预定义的事件发生的时候,就会被MySQL自动调用。

    2、创建触发器

      1》创建只有一个执行语句的触发器

    //trigger_time触发的时机,可以指定before或after;
    //trigger_event标识触发事件,包括insert、update、delete;
    //trigger_stmt是触发器执行语句。 create trigger trigger_name trigger_time trigger_event on tb_name
    for exch row trigger_stmt
    mysql> create table account(num int,amount decimal(10,2));
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> create trigger ins_num before insert
        -> on account
        -> for each row set @sum=@sum+NEW.amount;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> set @sum=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into account values(1,1.00),(2,2.00);
    Query OK, 2 rows affected (0.02 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select @sum;
    +------+
    | @sum |
    +------+
    | 3.00 |
    +------+
    1 row in set (0.00 sec)
    
    mysql>

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

    create trigger trigger_name trigger_time trigger_event
    on tb_name for exch row 
    begin
      ...
    end
    mysql> create table t1(a1 int);
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> create table t2(a2 int);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> delimiter //
    mysql> create trigger trigger_insert_t1 before insert
        -> on t1 for each row
        -> begin
        ->   insert into t2 values(NEW.a1);
        -> end//
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> delimiter ;
    mysql> insert into t1 values(233);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from t1;
    +------+
    | a1   |
    +------+
    |  233 |
    +------+
    1 row in set (0.00 sec)
    
    mysql> select * from t2;
    +------+
    | a2   |
    +------+
    |  233 |
    +------+
    1 row in set (0.00 sec)
    
    mysql>

    3、查看触发器,2种方式

      1》show triggers

    show triggers;

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

    select * from information_schema.triggers where condition;

    4、触发器的使用

       在insert、update、delete事件中对数据检查等。

    5、删除触发器

    drop trigger [schema_name.]trigger_name
  • 相关阅读:
    如何删除windows服务zz 重新安装PostgreSQL时删除上次遗留service的方法
    如何配置OGRE 1.7.0+CEGUI 0.7.1
    [原]一个由memset引发的知识点
    ArcGis测距问题
    自己动手,制作.net35离线安装包
    TTS语音合成
    Acess字段名用到与系统冲突的特殊名时的处理
    程序运行长期等待时显示等待动画
    修改Windows 2003 SOCKET端口数量默认5000限制
    服务器上发布的网站应用80端口时内网可以访问,外网不能访问
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/11462768.html
Copyright © 2011-2022 走看看