• (10)MySQL触发器(同时操作两张表)


    什么是触发器

    触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。

    举个例子,比如你现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插入一条数据的之后帮你在日志表中插入一条日志信息。当然触发器并不是只能进行插入操作,还能执行修改,删除

    触发器的事件:事件就是比如insert是插入指令,这时候只要定义好insert,那么就会在插入时候触发,其他的update等操作不会触发

    # 插入前
    CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
    BEGIN
    ...
    END
     
    # 插入后
    CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
    BEGIN
    ...
    END
     
    # 删除前
    CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
    BEGIN
    ...
    END
     
    # 删除后
    CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
    BEGIN
    ...
    END
     
    # 更新前
    CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
    BEGIN
    ...
    END
     
    # 更新后
    CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
    BEGIN
    ...
    END

    创建触发器的语法如下:

    CREATE TRIGGER 触发器名字 BEFORE DELETE ON 触发表的名字 FOR EACH ROW

    BEGIN

    insert into user_log (列名) values ('值');

    END

    trigger_name:触发器的名称

    tirgger_time:触发时机,为BEFORE或者AFTER

    trigger_event:触发事件,为INSERT、DELETE或者UPDATE

    tb_name:表示建立触发器的表明,就是在哪张表上建立触发器

    trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句

    所以可以说MySQL创建以下六种触发器:

    1、BEFORE INSERT

    2、BEFORE DELETE

    3、BEFORE UPDATE

    4、AFTER INSERT

    5、AFTER DELETE

    6、AFTER UPDATE

    修改终止符 

    创建触发器实例:

    DROP TRIGGER 触发器名字  #删除触发器

    show triggers G;  #查看触发器的指令

    *************************** 1. row ***************************
    Trigger: userlog  #触发器的名字
    Event: INSERT  #什么操作下触发,也就是监听的事件
    Table: user  #触发表的名字
    Statement: BEGIN   #触发器的开始
    insert into user_log (name) values ('xxxxx');  #sql指令
    END  #触发器结束
    Timing: BEFORE
    Created: NULL
    sql_mode: NO_ENGINE_SUBSTITUTION
    Definer: root@localhost
    character_set_client: utf8mb4
    collation_connection: utf8mb4_general_ci
    Database Collation: latin1_swedish_ci
    *************************** 2. row ***************************
    Trigger: demo
    Event: DELETE
    Table: user
    Statement: BEGIN
    insert into user_log (name) values ('xxxx');
    END
    Timing: BEFORE
    Created: NULL
    sql_mode: NO_ENGINE_SUBSTITUTION
    Definer: root@localhost
    character_set_client: gbk
    collation_connection: gbk_chinese_ci
    Database Collation: latin1_swedish_ci
    2 rows in set (0.01 sec)

  • 相关阅读:
    使用 ASP.NET 2.0 ObjectDataSource 控件

    掌握 ASP.NET 之路:自定义实体类简介
    将 JavaScript 与 ASP.NET 2.0 配合使用
    C# 程序的通用结构
    实例化web service里类的实例
    Web服务枚举组件不可用 修复 (转载)
    09年初步学习计划
    Javascript return false的作用
    如何识别 SQL Server 的版本
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10314870.html
Copyright © 2020-2023  润新知