MySQL 触发器的使用和理解

2022-05-15 0 354
目录
  • 1.触发器是什么?
  • 2.创建触发器
    • 创建触发器的语法如下:
    • 创建多个执行语句的触发器:
    •  NEW和OLD的使用:
  • 3.使用触发器

    1.触发器是什么?

    一类特殊的数据库程序,可以监视某种数据的操作(insert/update/delete),并触发相关的操作(insert/update/delete),保护数据的完整性。

    个人理解就有点类似于Java的观察者模式,一个对象变化,观察者也跟着做出响应。

    Mysql好像是从5.0以后开始支持触发器的。

    2.创建触发器

    创建触发器我将介绍两种方式:用语句创建,用navicat创建。

    创建触发器的语法如下:

    CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt
    trigger_name:触发器的名称
    tirgger_time:触发时机,为BEFORE或者AFTER
    trigger_event:触发事件,为INSERT、DELETE或者UPDATE
    tb_name:表示建立触发器的表明,就是在哪张表上建立触发器
    trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句
    所以可以说MySQL创建以下六种触发器:
    BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE
    AFTER INSERT,AFTER DELETE,AFTER UPDATE

    其中,触发器名参数指要创建的触发器的名字

    BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后

    FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器

    创建多个执行语句的触发器:

    CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
    ON 表名 FOR EACH ROW
    BEGIN
     执行语句列表
    END

     NEW和OLD的使用:

    触发器类型 new和old的使用
    insert new代表新增的数据
    update new代表更新后的数据,old代表更新前的数据
    delete old代表要删除的数据

    某一个字段可以用new/lod.字段名

    接下来我们创建2个表用来测试:

    stu表:主表(被观察者)

    MySQL 触发器的使用和理解

    DROP TABLE IF EXISTS `stu`;
    CREATE TABLE `stu` (
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
    `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
    `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
    `sort` int(11) NULL DEFAULT NULL COMMENT '排序字段',
    PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

    stu_log表:触发器关联表(观察者)

    MySQL 触发器的使用和理解

    DROP TABLE IF EXISTS `stu_log`;
    CREATE TABLE `stu_log` (
    `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
    `create_time` datetime(0) NULL DEFAULT NULL,
    PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

    现在我们假设有这样一个业务,在stu表新增和删除数据时,同步在stu_log中记录日志,记录name和时间。

    如果不使用触发器,我们就需要编写代码来实现这个需求,但是触发器可以帮我们轻松的实现。

    首先我们使用语句来创建一个insert触发器:

    DROP TRIGGER IF EXISTS `insert_log`;
    delimiter ;;
    CREATE TRIGGER `add_log` AFTER INSERT ON `stu` FOR EACH ROW BEGIN
    INSERT INTO stu_log(name,create_time) VALUES(new.`name`,now());
    END
    ;;
    delimiter ;

    执行结果:

    MySQL 触发器的使用和理解

    然后我们再用navicat创建一个delete触发器:

    step1:右键stu表,选择设计表—-触发器

    MySQL 触发器的使用和理解

    step2:如图所示填选,选择删除前触发

    MySQL 触发器的使用和理解

    step3:在下方定义框内写执行语句,如图   记得点保存!

    MySQL 触发器的使用和理解

    语句:

    begin
    INSERT INTO stu_log(name,create_time) VALUES(old.`name`,now());
    end

    3.使用触发器

    测试一下:新增一条数据

    insert into stu (name,age) VALUES('李白',36)

    查看stu表和stu_log表:

    MySQL 触发器的使用和理解

    MySQL 触发器的使用和理解

     如图,触发器已经生效了!

    测试删除一条数据

    DELETE from stu where name = '李白'

    查看stu表和stu_log表:

    MySQL 触发器的使用和理解

    MySQL 触发器的使用和理解

    如图,触发器已经生效了!

    以上就是MySQL 触发器的使用和理解的详细内容,更多关于MySQL 触发器的资料请关注NICE源码其它相关文章!

    免责声明:
    1、本网站所有发布的源码、软件和资料均为收集各大资源网站整理而来;仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 不得使用于非法商业用途,不得违反国家法律。否则后果自负!

    2、本站信息来自网络,版权争议与本站无关。一切关于该资源商业行为与www.niceym.com无关。
    如果您喜欢该程序,请支持正版源码、软件,购买注册,得到更好的正版服务。
    如有侵犯你版权的,请邮件与我们联系处理(邮箱:skknet@qq.com),本站将立即改正。

    NICE源码网 MySql MySQL 触发器的使用和理解 https://www.niceym.com/36249.html