十七、MySQL触发器(创建、删除、查看)详解

触发器

一、介绍

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

使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。
在这里插入图片描述

二、创建触发器

2.1 语法结构 :

create trigger trigger_name 
before/after insert/update/delete 
on tbl_name 
[ for each row ] -- 行级触发器 
begintrigger_stmt ; 
end;

2.2 示例
通过触发器记录 emp 表的数据变更日志 , 包含增加, 修改 , 删除 ;

  1. 创建emp表,并往表中插入数据:
create table emp(id int(11)not null auto_increment,name varchar(50)not null comment'姓名',age int(11)comment'年龄',salary int(11)comment'薪水',primary key(id)
)engine=innodb default charset=utf8;insert into emp(id,name,age,salary)
values(null,'金毛狮王',55,3800),(null,'白眉鹰王',60,4000),(null,'青翼蝠王',38,2800),(null,'紫衫龙王',42,1800);SELECT * from emp;

在这里插入图片描述

  1. 创建一张日志表emp_logs :
create table emp_1ogs(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=innodb default charset=utf8;
  1. 创建insert型触发器,完成插入数据时的日志记录:
# 创建insert型触发器,完成插入数据时的日志记录
delimiter $
create trigger emp_logs_insert_trigger
after insert
on emp
for each row
begin insert into emp_logs(id,operation,operate_time,operate_id,operate_params)values(null,'insert',NOW(),new.id,CONCAT('插入后(id:',new.id,',name:',new.name,',age:',new.age,',salary:',new.salary,')'));
end $
delimiter ;# 查看触发器
show triggers;

在这里插入图片描述

  1. 创建 update 型触发器,完成更新数据时的日志记录 :
delimiter $
create trigger emp_logs_update_trigger
after update
on emp
for each row
begin insert into emp_logs(id,operation,operate_time,operate_id,operate_params)values(null,'update',NOW(),new.id,CONCAT('修改前(id:',old.id,',name:',old.name,',age:',old.age,',salary:',old.salary,');','修改后(id:',new.id,',name:',new.name,',age:',new.age,',salary:',new.salary,')'));
end $
delimiter ;
  1. 创建delete 行的触发器 , 完成删除数据时的日志记录 :
DELIMITER $ 
create trigger emp_logs_delete_trigger 
after delete 
on emp 
for each row 
begin insert into emp_logs (id,operation,operate_time,operate_id,operate_params) values(null,'delete',now(),old.id,concat('删除前(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,')')); 
end $ 
DELIMITER ;

在这里插入图片描述
6. 测试:

insert into emp(id,name,age,salary) 
values(null, '光明左使',30,3500); SELECT * from emp;SELECT * from emp_logs;insert into emp(id,name,age,salary) 
values(null, '光明右使',33,3200); SELECT * from emp;SELECT * from emp_logs;update emp set age = 39 where id = 3; 
SELECT * from emp;SELECT * from emp_logs;delete from emp where id = 4;SELECT * from emp;SELECT * from emp_logs;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、删除触发器

3.1 语法结构 :

drop trigger [schema_name.]trigger_name

如果没有指定 schema_name,默认为当前数据库

在这里插入图片描述

四、查看触发器

show triggers ;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2215. 找出两数组的不同(set)

文章目录1. 题目2. 解题1. 题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中: answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。answer[1] 是 nums2 中所有 不 存在…

HDOJ 5071 Chat 模拟

大模拟: 1》saygoodbye要先对 always on top 的人说 2》对没有说过话的不要说good bye 3》用long long Chat Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 337 Accepted Submission(s): 82Prob…

十八、MySQL之TCL事务控制语言(详解)

TCL : Transaction Control Language 事务控制语言 零、MySQL 中的存储引擎 1、概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中。 2、通过show engines;来查看mysql支持的存储引擎。 3、 在mysql中用的…

LeetCode 2220. 转换数字的最少位翻转次数(位运算)

文章目录1. 题目2. 解题1. 题目 一次 位翻转 定义为将数字 x 二进制中的一个位进行 翻转 操作,即将 0 变成 1 ,或者将 1 变成 0 。 比方说,x 7 ,二进制表示为 111 ,我们可以选择任意一个位(包含没有显示…

LeetCode 2221. 数组的三角和

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums ,其中 nums[i] 是 0 到 9 之间(两者都包含)的一个数字。 nums 的 三角和 是执行以下操作以后最后剩下元素的值: nums 初始包含 n 个元素。如果 n 1 &…

移动web开发之rem布局(rem基础、媒体查询、 less 基础、rem适配方案)

移动web开发之rem布局 一、rem基础 rem单位 rem (root em)是一个相对单位,类似于em,em是父元素字体大小。 不同的是rem的基准是相对于html元素的字体大小。 比如,根元素(html)设置font-size12px; 非根元素设置wid…

LeetCode 2222. 选择建筑的方案数

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的二进制字符串 s ,它表示一条街沿途的建筑类型,其中: s[i] 0 表示第 i 栋建筑是一栋办公楼,s[i] 1 表示第 i 栋建筑是一间餐厅。 作为市政厅的官员,你需要随…

LeetCode 2224. 转化时间需要的最少操作数(贪心)

文章目录1. 题目2. 解题1. 题目 给你两个字符串 current 和 correct ,表示两个 24 小时制时间 。 24 小时制时间 按 "HH:MM" 进行格式化,其中 HH 在 00 和 23 之间,而 MM 在 00 和 59 之间。 最早的 24 小时制时间为 00:00 &…

移动端WEB开发之响应式布局(响应式开发原理、bootstrap、阿里百秀案例)

移动端WEB开发之响应式布局 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置&#xff0c;从而适配不同设备的目的。 设备的划分情况&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><…

jQuery学习笔记系列(三)——事件注册、事件处理、事件对象、拷贝对象、多库共存、jQuery插件、toDoList综合案例

day03 - jQuery 学习目标&#xff1a; 能够说出4种常见的注册事件 能够说出 on 绑定事件的优势 能够说出 jQuery 事件委派的优点以及方式 能够说出绑定事件与解绑事件 能够说出 jQuery 对象的拷贝方法 能够说出 jQuery 多库共存的2种方法 能够使用 jQuery 插件 1.1. jQuery 事件…

LeetCode 2225. 找出输掉零场或一场比赛的玩家(计数)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 matches 其中 matches[i] [winneri, loseri] 表示在一场比赛中 winneri 击败了 loseri 。 返回一个长度为 2 的列表 answer &#xff1a; answer[0] 是所有 没有 输掉任何比赛的玩家列表。answer[1] 是所有恰好输掉 一场 比…

LeetCode 2226. 每个小孩最多能分到多少糖果(二分查找)

文章目录1. 题目2. 解题1. 题目 给你一个 下标从 0 开始 的整数数组 candies 。数组中的每个元素表示大小为 candies[i] 的一堆糖果。你可以将每堆糖果分成任意数量的 子堆 &#xff0c;但 无法 再将两堆合并到一起。 另给你一个整数 k 。你需要将这些糖果分配给 k 个小孩&am…

指令系统——数据寻址(3)——堆栈寻址(详解)

一、总览 二、堆栈寻址 堆栈寻址&#xff1a;操作数存放在堆栈中&#xff0c;隐含使用堆栈指针&#xff08;SP&#xff09;作为操作数地址。堆栈是存储器&#xff08;或专用寄存器组&#xff09;中一块特定的按“后进先出&#xff08;LIFO&#xff09;” 原则管理的存储区&…

指令系统 CISC和RISC(详解)

一、总览 二、CISC CISC:Complex Instruction Set Computer设计思路&#xff1a;一条指令完成一个复杂的基本功能。代表&#xff1a;86架构&#xff0c;主要用于笔记本、台式机等。 80-20规律&#xff1a;典型程序中80%的语句仅仅使用处理机中20%的指令 三、RISC RISC:Reduc…

LeetCode 2231. 按奇偶性交换后的最大数字

文章目录1. 题目2. 解题1. 题目 给你一个正整数 num 。你可以交换 num 中 奇偶性 相同的任意两位数字&#xff08;即&#xff0c;都是奇数或者偶数&#xff09;。 返回交换 任意 次之后 num 的 最大 可能值。 示例 1&#xff1a; 输入&#xff1a;num 1234 输出&#xff1a…

亲密接触Redis-第一天

引言nosql&#xff0c;大规模分布式缓存遍天下&#xff0c;Internet的时代在中国由其走得前沿&#xff0c;这一切归功于我国特色的电商。因此nosql、大数据技术在中国应用的比国外还要前沿。从这一章开始我们将开始进入到真正的SOA、PAAS、SAAS、互联网的领域&#xff0c;因此每…

Ajax 编程基础(一)

一、Ajax 基础 传统网站中存在的问题&#xff1a; 网速慢的情况下&#xff0c;页面加载时间长&#xff0c;用户只能等待表单提交后&#xff0c;如果一项内容不合格&#xff0c;需要重新填写所有表单内容页面跳转&#xff0c;重新加载页面&#xff0c;造成资源浪费&#xff0c…

LeetCode 2232. 向表达式添加括号后的最小结果

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 expression &#xff0c;格式为 "<num1><num2>" &#xff0c;其中 <num1> 和 <num2> 表示正整数。 请你向 expression 中添加一对括号&#xff0c;使得在添加之后&#xff0…

一、服务端开发基础(搭建Web服务器、网络基础概念、请求响应流程、配置Apache、静态网站与动态网站)

一、建立你的第一个网站&#xff08;目标&#xff09; 前端开发 最终还是属于 Web 开发 中的一个分支&#xff0c;想要成为一名合格的前端开发人员&#xff0c;就必须要 充分理解Web 的概念。 构建一个专业的网站是一项巨大的工作&#xff01;对于新手我们应该从小事做起&#…

LeetCode 2233. K 次增加后的最大乘积(优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个非负整数数组 nums 和一个整数 k 。每次操作&#xff0c;你可以选择 nums 中 任一 元素并将它 增加 1 。 请你返回 至多 k 次操作后&#xff0c;能得到的 nums的 最大乘积 。由于答案可能很大&#xff0c;请你将答案对 10^9 7 取余后…