MYSQL触发器

MYSQL触发器


. 触发器概念

  1. 作用:在通过sql对表进行插入,更新,删除操作的时候自动执行触发器中的sql语句对数据进行进一步操作
  2. 分类:
    1. DML(数据库操作语言)
      1. after触发器(之后触发)
        1. insert触发器
        2. update触发器
        3. delete触发器
      2. before触发器(之前触发)
        1. insert触发器
        2. update触发器
        3. delete触发器

. 触发器工作原理

  1. 触发过程:
    1. 触发器被触发
    2. 在内存中创建两张虚拟表inserted和deleted
    3. 根据操作表的sql语句的不同,对两张虚拟表进行相应的操作
    4. 触发器检查inserted和deleted表中的新数据,确定是否要回滚或者其他操作
  2. 不同sql语句执行时,对inserted和deleted的操作对照

操作表的sql语句

inserted表

deleted表

insert语句

存放新增的记录

 

deleted语句

 

存放被删除的记录

update语句

存放更新后的记录

存放更新前的记录


. 触发器的创建

  1. 语法:
    #1. 单条语句触发器
    
    CREATE  TRIGGER  触发器名
    
    trigger_time
    
    trigger_event ON 表名
    
    FOR EACH ROW
    
    a_trigger_stmt
    
    
    
    #2. 多条语句触发器
    
    DELIMITER $
    
    CREATE  TRIGGER  触发器名
    
    trigger_time
    
    trigger_event ON 表名
    
    FOR EACH ROW
    
    BEGIN
    
    trigger_stmts
    
    END
    
    DELIMITER ;
    
    

    其中:

    1. trigger_time{BEFORE | AFTER}  触发时机

    2. trigger_event{INSERT | UPDATE | DELETE}  触发事件

    3. a_trigger_stmt  触发器程序体,一句SQL语句

    4. trigger_stmts  触发器程序体,多条语句。

  2. 注意:一个表上不能建立两个相同类型的触发器,所以一个表最多建立六个触发器
  3. BEGIN...END
    1. DELIMITER:用来重新定义sql语句的结束符号
      1. 中因为其中一条结束的时候的分号会导致mysql判断整条语句结束,所以再开始的地方通过“DELIMITER 重新定义的语句结束符号”来让mysql知道在哪结束,当然,运行完需要将;在改回来,所以有了最后一句“DELIMITER ;
    2. DECLARE:用来定义局部变量
      1. BEGIN...END中用
      2. 定义在BEGIN...END中所有语句的第一句
      3. 语法:DECLARE var_name[,...] type [DEFAULT value]
        1. var_name 为变量名称,同 SQL 语句一样,变量名不区分大小写;
        2. type 为 MySQL 支持的任何数据类型;可以同时定义多个同类型的变量,用逗号隔开;
        3. 变量初始值为 NULL,如果需要,可以使用 DEFAULT 子句提供默认值,值可以被指定为一个表达式
  4. NEW和OLD
    1. new和old表示触发器所在的表中,触发了触发器的那一行数据
    2. 其中old是只读的,而new则可以在触发器中使用set赋值

操作表的sql语句

new

old

insert语句

存放新增行数据

 

deleted语句

 

表示被删除行数据

update语句

表示更新后的行数据

表示更新前的行数据

  1. 易于理解的实例:mysql触发器商城应用

四. 管理触发器

  1. 查看触发器:SHOW TRIGGERS [FROM schema_name];
  2. 删除触发器:DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值