粤嵌星计划打卡第84天(java中mysql数据库中的触发器部分)

#粤嵌我来了##粤嵌星计划#
粤嵌星计划挑战
今天打卡第84天

一、什么是触发器

1、触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是通过事件来触发,比如对一个表进行操作(insert,delete,update)的时候,就会执行它。 (触发器概念)

2、区别:触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行
二、创建触发器

1、 语法


create
    TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name FOR EACH ROW
BEGIN
    # do something
END;

2、关键词说明

             **a. trigger_name: 触发器名称,唯一不可重复的。
             b. trigger_time: 触发器执行时间 。 {BEFORE / AFTER} 表示事件之前或之后执行。
             c. trigger_event:触发触发器的事件。{INSERT / DELETE / UPDATE}某个事件执行** 

INSERT 当新的一行数据插入表中时触发,如执行insert,load data,replace语句插入新数据
DELETE 当表的一行数据被删除时触发,如执行delete,replace语句时
UPDATE 当表的一行数据被修改时触发,如执行update语句时
d. table_name:触发器作用于某张表上。
3.1、示例 — 创建一个 update 触发器

CREATE
    TRIGGER update_client
    AFTER UPDATE
    on client for each ROW
BEGIN
    INSERT INTO `client_log` (
        `client_id`,
        `modify_flag`,
        `name`,
        `contact`,
        `phone`,
        `email`,
        `remarks`,
        `del_flag`,
        `create_date`,
        `create_by`,
        `update_date`,
        `update_by`
    )
    VALUES(
        old.id,
        "修改--原数据",
        old.name,
        old.contact,
        old.phone,
        old.email,
        old.remarks,
        old.del_flag,
        old.create_date,
        old.create_by,
        old.update_date,
        old.update_by
    );
END;

3.2、示例—创建一个 insert 触发器

DELIMITER $ # (使用 DELIMITER 将语句分隔符改为 $)
CREATE
    TRIGGER insert_client
    AFTER INSERT
    on client for each ROW
BEGIN
    INSERT INTO `chapter`.`client_log` (
        `client_id`,
        `modify_flag`,
        `name`,
        `contact`,
        `phone`,
        `email`,
        `remarks`,
        `del_flag`,
        `create_date`,
        `create_by`,
        `update_date`,
        `update_by`
    )
    VALUES(
        new.id,
        "新增数据",
        new.name,
        new.contact,
        new.phone,
        new.email,
        new.remarks,
        new.del_flag,
        new.create_date,
        new.create_by,
        new.update_date,
        new.update_by
    );
END$
DELIMITER $
 

4、old 、 new 说明

              a. old :表示 修改 或 删除 之前的字段数据

              b. new:表示 修改之后 或 插入的字段数据。(插入 之前、之后都可以)

三、查看触发器

1.show triggers ;
2.SELECT a.* from information_schema.TRIGGERSa [ where a.TRIGGER_NAME = 'update_client' ] ;

四、删除触发器

DROP TRIGGER IF EXISTS update_client ;

五、触发器的执行顺序

1.我们建立的数据库一般都是innoDB数据库,若sql语句或触发器执行失败,mysql会自动使用回滚事物有:

1.若before触发器执行失败,则sql无法正常执行。
2.若sql执行失败时候,after型触发器不会触发
3.after触发器执行失败,则sql会混滚。

2.执行顺序图解
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值