文章目录

  • 1. 触发器介绍
  • 2. 触发器语法
    • 2.1 创建触发器
    • 2.2 查看触发器
    • 2.3 删除触发器
  • 3. 触发器案例
    • 3.1 插入数据触发器
    • 3.2 修改数据触发器
    • 3.3 删除数据触发器
  • 4. 小结

1. 触发器介绍

触发器是与表有关的数据库对象,指在insert / update / delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作 。

使用别名OLDNEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发

触发器类型 NEW OLD
INSERT 型触发器 NEW 表示将要或者已经新增的数据
UPDATE 型触发器 OLD 表示修改之前的数据,NEW 表示将要或已经修改后的数据
DELETE 型触发器 OLD 表示将要或者已经删除的数据

2. 触发器语法


2.1 创建触发器

CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE
ON tbl_name FOR EACH ROW -- 行级触发器
BEGINtrigger_stmt;
END;

2.2 查看触发器

SHOW TRIGGERS;

2.3 删除触发器

-- 如果没有指定 schema_name,默认为当前数据库
DROP TRIGGER [schema_name.]trigger_name ;

3. 触发器案例

通过触发器记录 tb_user 表的数据变更日志,将变更日志插入到日志表user_logs中, 包含增加、修改、删除;

表结构准备:

-- 准备工作 : 日志表 user_logs
create table user_logs
(id             int(11)     not null auto_increment,operation      varchar(20) not null comment '操作类型, insert/update/delete',operate_time   datetime    not null comment '操作时间',operate_id     int(11)     not null comment '操作的ID',operate_params varchar(500) comment '操作参数',primary key (`id`)
) engine = innodbdefault charset = utf8;

示例数据准备:

create table tb_user
(id         int primary key auto_increment comment '主键',name       varchar(50) not null comment '用户名',phone      varchar(11) not null comment '手机号',email      varchar(100) comment '邮箱',profession varchar(11) comment '专业',age        tinyint unsigned comment '年龄',gender     char(1) comment '性别 , 1: 男, 2: 女',status     char(1) comment '状态',createtime datetime comment '创建时间'
) comment '系统用户表';INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('吕布', '17799990000', 'lvbu666@163.com', '软件工程', 23, '1', '6', '2001-02-02 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('曹操', '17799990001', 'caocao666@qq.com', '通讯工程', 33, '1', '0', '2001-03-05 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('赵云', '17799990002', '17799990@139.com', '英语', 34, '1', '2', '2002-03-02 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('孙悟空', '17799990003', '17799990@sina.com', '工程造价', 54, '1', '0', '2001-07-02 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('花木兰', '17799990004', '19980729@sina.com', '软件工程', 23, '2', '1', '2001-04-22 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('大乔', '17799990005', 'daqiao666@sina.com', '舞蹈', 22, '2', '0', '2001-02-07 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('露娜', '17799990006', 'luna_love@sina.com', '应用数学', 24, '2', '0', '2001-02-08 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('程咬金', '17799990007', 'chengyaojin@163.com', '化工', 38, '1', '5', '2001-05-23 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('项羽', '17799990008', 'xiaoyu666@qq.com', '金属材料', 43, '1', '0', '2001-09-18 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('白起', '17799990009', 'baiqi666@sina.com', '机械工程及其自动 化', 27, '1', '2', '2001-08-16 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('韩信', '17799990010', 'hanxin520@163.com', '无机非金属材料工 程', 27, '1', '0', '2001-06-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('荆轲', '17799990011', 'jingke123@163.com', '会计', 29, '1', '0', '2001-05-11 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('兰陵王', '17799990012', 'lanlinwang666@126.com', '工程造价', 44, '1', '1', '2001-04-09 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('狂铁', '17799990013', 'kuangtie@sina.com', '应用数学', 43, '1', '2', '2001-04-10 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('貂蝉', '17799990014', '84958948374@qq.com', '软件工程', 40, '2', '3', '2001-02-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('妲己', '17799990015', '2783238293@qq.com', '软件工程', 31, '2', '0', '2001-01-30 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('芈月', '17799990016', 'xiaomin2001@sina.com', '工业经济', 35, '2', '0', '2000-05-03 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('嬴政', '17799990017', '8839434342@qq.com', '化工', 38, '1', '1', '2001-08-08 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('狄仁杰', '17799990018', 'jujiamlm8166@163.com', '国际贸易', 30, '1', '0', '2007-03-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('安琪拉', '17799990019', 'jdodm1h@126.com', '城市规划', 51, '2', '0', '2001-08-15 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('典韦', '17799990020', 'ycaunanjian@163.com', '城市规划', 52, '1', '2', '2000-04-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('廉颇', '17799990021', 'lianpo321@126.com', '土木工程', 19, '1', '3', '2002-07-18 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('后羿', '17799990022', 'altycj2000@139.com', '城市园林', 20, '1', '0', '2002-03-10 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('姜子牙', '17799990023', '37483844@qq.com', '工程造价', 29, '1', '4', '2003-05-26 00:00:00');

3.1 插入数据触发器

create trigger tb_user_insert_triggerafter inserton tb_userfor each row
begininsert into user_logs(id, operation, operate_time, operate_id, operate_params)VALUES (null, 'insert', now(), new.id,concat('插入的数据内容为: id=', new.id, ',name=', new.name, ', phone=', NEW.phone, ', email=', NEW.email,', profession=', NEW.profession));
end;

测试:

-- 查看
show triggers;

-- 插入数据到tb_user
insert into tb_user(id, name, phone, email, profession, age, gender, status, createtime)
VALUES (26, '二皇子', '18809091212', 'erhuangzi@163.com', '软件工程', 23, '1', '1', now());

查看user_logs里面的数据

测试完毕之后,检查日志表中的数据是否可以正常插入,以及插入数据的正确性。


3.2 修改数据触发器

create trigger tb_user_update_triggerafter updateon tb_userfor each row
begininsert into user_logs(id, operation, operate_time, operate_id, operate_params)VALUES (null, 'update', now(), new.id,concat('更新之前的数据: id=', old.id, ',name=', old.name, ', phone=', old.phone, ', email=', old.email,', profession=', old.profession, ' | 更新之后的数据: id=', new.id, ',name=', new.name, ', phone=',NEW.phone, ', email=', NEW.email, ', profession=', NEW.profession));
end;
-- 查看
show triggers;

-- 更新
update tb_user
set profession = '会计'
where id = 23;update tb_user
set profession = '会计'
where id <= 5;

测试完毕之后,检查日志表中的数据是否可以正常插入,以及插入数据的正确性。


3.3 删除数据触发器

create trigger tb_user_delete_triggerafter deleteon tb_userfor each row
begininsert into user_logs(id, operation, operate_time, operate_id, operate_params)VALUES (null, 'delete', now(), old.id,concat('删除之前的数据: id=', old.id, ',name=', old.name, ', phone=', old.phone, ', email=', old.email,', profession=', old.profession));
end;

查看新增的删除数据触发器:

show triggers;

-- 删除数据
delete
from tb_user
where id = 26;

测试完毕之后,检查日志表中的数据是否可以正常插入,以及插入数据的正确性。


4. 小结

  • MySQL视图
  • MySQL 存储过程 存储函数


MySQL 进阶 触发器 -- 触发器介绍、触发器语法、触发器案例相关推荐

  1. MySQL 进阶 视图 -- 视图介绍、视图CRUD语法、检查选项(CASCADED、LOCAL)、视图的更新、视图作用、视图案例

    文章目录 1. 视图 1.1 视图介绍 1.2 语法 1.2.1 创建视图 1.2.2 查询视图 1.2.3 修改视图 1.2.4 删除视图 1.2.5 插入数据说明 1.3 检查选项 1.3.1 C ...

  2. 李玉婷MYSQL进阶02:条件查询

    李玉婷MYSQL进阶02:条件查询 语法结构: select: 查询列表 from:表名 where: 筛选条件 分类: 一.条件表达式 示例:salary>10000 条件运算符:> & ...

  3. 超详细图解!【MySQL进阶篇】存储过程,视图,索引,函数,触发器

    超详细图解![MySQL进阶篇]存储过程,视图,索引,函数,触发器 1.1 下载Linux 安装包 1.2 安装MySQL 1.3 启动 MySQL 服务 1.4 登录MySQL 2\. 索引 2.1 ...

  4. 【MySQL | 进阶篇】05、MySQL 视图、触发器讲解

    目录 一.视图 1.1 介绍 1.2 语法 1.2.1 演示示例 1.3 检查选项 1.3.1 CASCADED 级联 1.3.2 LOCAL 本地 1.3.3 示例演示 1.4 视图的更新 1.4. ...

  5. 数据库mysql进阶—trigger触发器

    触发器 在实际开发中,我们经常会遇到这样的情况:有两个或者多个相互关联的表,如商品信息和库存信息分别存放在2个不同的数据表中,我们在添加一条新的商品记录的时候,为了保证数据的完整性,必须同时在库存表中 ...

  6. MySQL进阶--数据库的触发器详解

    触发器详解 触发器(trigger)也称为触发程序,是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件 ...

  7. mysql latid1_【转】mysql触发器的实战经验(触发器执行失败,sql会回滚吗) | 学步园...

    1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...

  8. MySQL函数、视图、存储过程及触发器

    前言 MySQL在我们工作中都会用到,那么我们最常接触的就是增删改查,而对于增删改查来说,我们更多的是查询.但是面试中,面试官又不会问你什么查询是怎么写的,都是问一些索引啊,事务啊, 底层结构这些东西 ...

  9. mysql游标触发器批量_MySQL游标和触发器

    一.游标 定义:是一个存储在MySQL服务器上的数据库查询,是一种被select语句检索出来的结果集. 作用:方便在检索出来的结果集中前进或后退一行或多行. PS:游标主要用于交互式应用:MySQL中 ...

最新文章

  1. Zookeeper-Zookeeper的配置
  2. Linux下的signal信号机制
  3. 谷歌:不守规矩的“顽童”
  4. 在SLS中快速实现异常巡检
  5. (一二四)给类对象赋值、以及类对象的返回值
  6. WinForm 设置窗体启动位置在活动屏幕右下角
  7. spark成长之路(1)spark究竟是什么?
  8. 有没有这样一种程序员写代码的利器
  9. MFC 驱动加载工具(安装/运行/停止/卸载)
  10. 产品经理笔试题分析(一)
  11. 防火墙的目标地址转换和源地址转换
  12. C语言中文网_java复习进度
  13. RAM和ROM存储空间的混合
  14. 【无线通信协议笔记】蓝牙篇:BLE HID协议
  15. 写一个简单的python调用接口(API)
  16. [转]复合信号、S-Video信号、分量信号
  17. homeassistant搭建_搭建最基本的Home assistant
  18. 自适应变异麻雀搜索优化算法
  19. 研究人员成功从地面入侵飞行中的飞机
  20. 绘画用电容笔还是触控笔?适合ipad画画的电容笔推荐

热门文章

  1. 引力产生的原因是什么
  2. source 命令的用法(与 sh Filename、./Filename的区别)
  3. 9个免费的 CSS 生成器网站
  4. PCIe ARI (Alternative Routing-ID Interpretation)介绍
  5. SiamFC++笔记
  6. MATLAB最速下降法求解函数极小值
  7. 转行智能控制的这些年
  8. web前端入门到实战:css中border-style 属性
  9. 分类:决策树——剪枝
  10. Android 同步网络时间