mysql 触发器不能同时 insert or update or delete_MySQL6:触发器

什么是触发器

MySQL的触发器(trigger)和存储过程一样,都是嵌入到MySQL中的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

创建触发器

触发器是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用。比如对student表进行操作(INSERT、DELETE或UPDATE)时就会激活它执行。

触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于满足复杂的业务规则或要求。可以创建只有一条语句的触发器,不过一般都是有多个执行语句的触发器用得比较多,即使单条语句的触发器,也可以使用多条语句的触发器的写法来写,看下有多个执行语句的触发器的基本写法:

CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name FOR EACH ROW trigger_stmt

解释一下:

1、trigger_name标识触发器名称,用户自行指定

2、trigger_time标识触发时机,可以指定为before或after

3、trigger_event标识触发事件,包括INSERT、UPDATE和DELETE

4、tbl_name标识建立触发器的表名,即在哪张表上建立触发器

5、trigger_stmt是触发器程序体,触发器程序可以使用begin和end作为开始和结束,中间包含多条语句

触发器程序可以使用begin和end作为开始和结束,中间包含多条语句。举个例子,还是以前的学生表:

create table student( studentId int primary key auto_increment not null, studentName varchar(10) not null, studentAge int, studentPhone varchar(15))

给学生表的studentName、studentAge、studentPhone三个字段都创建一个触发器表:

create table triggerstudentname( t_studentName VARCHAR(10));create table triggerstudentAge( t_studentAge int);create table triggerstudentPhone( t_studentPhone VARCHAR(15));

创建一个触发器,每次插入一条数据之后分别往三张表插字段:

CREATE TRIGGER trigger_student AFTER INSERT ON studentFOR EACH ROW BEGIN INSERT INTO triggerstudentname values(NEW.studentName); INSERT INTO triggerstudentAge values(NEW.studentAge); INSERT INTO triggerstudentPhone values(NEW.studentPhone);END

插入三条数据:

insert into student values(null,'Jack', '11', '55555555');insert into student values(null,'Dicky', '14', '66666666');insert into student values(null,'Coco', '19', '77777777');commit;

看一下三张表的情况:

8bd419c26b4a88e7601e4ee1d9ab20e5.png
18916867b89b6216abbc2bfd623aa5d9.png
b7e0039d8632a6bdc85aa3206fa37d86.png

没什么问题,执行结果显示,在向student表插入数据的同时,triggerstudentname、triggerstudentAge和triggerstudentPhone三张表里面的数据都发生了裱花,INSERT动作触发了触发器。

查看触发器

查看触发器是指查看数据库中已存在的触发器的定义、状态和语法信息等。可以通过命令来查看已经创建的触发器,有两种方式可以查看触发器,一一讲解。

1、SHOW TRIGGERS语句查看触发器

通过SHOW TRIGGERS查看触发器的语句如下:

SHOW TRIGGERS;

用这个命令来查看一下触发器:

9b3ce95f7561b0a71b622fdf6fe1488e.png

有一部分没截取完整,解释一下主要部分的含义:

(1)Trigger表示触发器的名称,这里有两个触发器分别是tri_student和trigger_student

(2)Event表示激活触发器的事件,这里的两个触发事件为插入操作INSERT

(3)Table表示激活触发器的操作对象表,这里都为student表

(4)Statement表示激活触发器之后执行的语句

(5)Timing表示触发器触发的时间,分别为插入操作之前(BEFORE)和插入操作之后(AFTER)

2、在triggers表中查看触发器信息

SHOW TRIGGERS语句查看当前创建的所有触发器信息,这在触发器较少的情况下,使用该语句会很方便,如果要查看特定的触发器信息,可以直接从infomation_schema数据库中的triggers表中查找,通过SELECT命令查看,基本语法为:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE condition;

比如:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME = 'trigger_student';

可以自己查看一下命令运行的效果

删除触发器

使用DROP TRIGGER语句可以删除MySQL中已经定义的触发器,删除触发器的基本语法为:

DROP TRIGGER [schema_name.]trigger_name;

schema_name表示数据库名称,是可选的,如果省略了schema_name,将从当前数据库中删除触发器,trigger_name是要删除的触发器的名称,比如:

DROP TRIGGER school.tri_student

触发器tri_student删除成功

使用触发器的注意点

在使用触发器的时候需要注意:对于相同的表,相同的事件只能创建一个触发器

比如对表student创建了一个BEFORE INSERT触发器,那么如果对表student再次创建一个BEFORE INSERT触发器,MySQL将会报错,此时,只可以在表student上创建AFTER INSERT或者BEFORE UPDATE类型的触发器。灵活地运用触发器将为操作省去很多麻烦。

a0bd5c663535cf4278ca8edefe2ae155.png

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

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

相关文章

javabean连接mysql数据库,jsp+javabean 链接 mysql 数据库

JSPJavaBean html一、JavaBean类java首先先澄清 这个三个都是绝对路径 没有相对路径, E://test.txt 和 E:/test.txt 是一个意思 E:\\text.txt 用这样的写法是 \\ 转义了 ‘\’ .linux为何有\\ 的写法 和 / 这样的写法呢 ,由于window 默认的是\\ 这样…

mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引

冗余索引和未使用索引的危害随着上线的业务越来越多,在MySQL数据库中建的表也会越来越多,为提高查询访问速度,会创建相应的索引。但是由于技术人员的水平参差不齐,业务下线,代码逻辑变更等原因,导致线上数据…

java第一次课必修实验答案,Java第一次实验报告

北京电子科技学院(BESTI)实验报告课程:Java实验 班级:201352 姓名:池彬宁 学号:20135212成绩: 指导教师:娄佳鹏 实验日期:15.04.14实验密级: 预习程度…

python实现目标识别_Python10行代码实现目标检测

ImageAI可以让程序员和软件开发者只用几行代码,就能轻易地把最先进的计算机视觉技术整合到他们现有的以及新的应用程序里面。用ImageAI实现目标检测,你只需要以下步骤:安装Python安装ImageAI和相关函数库下载目标检测模型文件运行示例代码(只…

在matlab中求协方差,matlab里面的求协方差函数

一:matlab里面关于方差和协方差的几点需要注意的求均值的函数:mean求方差的函数:var标准差:方差:求协方差的函数:cov1 如果a,b是向量,则:cov(a,b)相当于是[D(a),cov(a,b);cov(b,a),D…

python做var模型_【Python金融量化】VaR系列(五):Copula模型估计组合VaR-阿里云开发者社区...

1. 资产组合VaR建模方法回顾文章中总结了通过DCC模型估计组合向前一日VaR的方法,整体思路如下:● 通过Garch族模型估计各资产的波动率● 通过DCC模型估计各资产间的相关系数,结合1得到资产组合的协方差矩阵● 在各资产正态性假设的前提下&…

matlab从矩阵中取rp开头文件,matlab trainrp

Af ] train(net, P,T, Pi, Ai,VV ,TV ) 3 [Y, Pf , Af , E, perf ] sim(net, P, Pi, Ai,T ) {tansig,purelin},trainrp BP lr......traingdm、traingda、 traingdx 、 trainrp 、 ...traingdm traingda traingdx trainrp train...{tansig,purelin},trainrp BP 网络的训练函数 训…

手机浏览器网址_「效率集」自定义网址导航高级功能介绍

「效率集」是国内仅有的几家提供了个性自定义导航的网站,功能比hao123强,用户体验优于百度导航首页,且支持聚合搜索,方便用户从不同渠道(网页,微博,微信公众号,知乎,维基…

属于服务器端运行的程序_生信分析云平台产品开发 - 5 生信分析pipeline服务器端运行...

在上文 [生信分析云平台产品开发 - 4 生信分析pipeline的图形化] 讨论了生信分析pipeline的图形化,如何用图形的方式显示生信pipeline,但是pipeline脚本按照变量的形式保存之后,如何运行,在什么环境下运行?是本文要解决…

c mysql 统计不重复数据库,MySQL_MySQL数据库中分组统计的问题,首先准备四张表A、B、C、D, - phpStudy...

MySQL数据库中分组统计的问题首先准备四张表A、B、C、D,--------------------------------A  | B  | C  | Da b | a c | a d | d e1 1 | 1 1 | 1 A | A 12 2 | 1 3 | 2 B | B 23 4 | …

TF卡里删掉文件后内存没变大_原来三星手机是这样清理内存的,难怪用好几年也不卡...

三星手机的耐用性一直都很高,而除了手机本身系统性能做的很好之外,手机的设置也是很人性化的。在三星手机使用了一段时间过后,手机里的内存会越来越大,手机里的垃圾也会越存越多,那么我们应该怎么清理手机中的内存呢&a…

拓扑排序排课系统_视频结构化人脸布控系统

一、平台背景在国家智慧城市的建设中的公共安全,对维稳防控、全城布控、预测预警、综合管理等提出了更高需求,针对这些需求我们作为识别领域的领先者,结合我们的识别技术,更全面、更智能提出了我们视频结构化黑名单布控系统解决方…

php数组转ini文件,php – 将数组转换为.ini文件

为了编写.ini文件,你需要创建自己的函数,因为除了阅读之外,PHP没有提供开箱即用的功能(可以在这里找到:http://php.net/manual/pl/function.parse-ini-file.php).可能将多维数组封装到.ini-syntax兼容字符串的函数示例可能如下所示:function arr2ini(arr…

win10去掉快捷方式小箭头_简单几步,教你怎么去掉win10电脑图标小箭头

Windows通过在桌面图标上增加“小箭头”,来区分它是属于正经的应用程序、文件还是快捷方式。好处能够一目了然的区分桌面显示的内容都是什么。坏处就是对有强迫症、要求统一的用户来说,这个小箭头实在是太碍眼了!如果你属于后者,注…

python整形怎么切片_python 切片操作 slice

列表切片:list [start_index, end_index, step] step可正可负,为正时表示从左往右取,为负时表示从右往左取步长-1:表示从右往左取,开始1,结束3,表示从左往右取,两个互相矛盾&#x…

php实现双向队列详解,PHP实现一个双向队列例子

deque,全名double-ended queue,是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双向队列(双端队列)就像是一个队列,但是你可以在任何一端添加或移除元素。双端队列(de…

CIF进口货物流程图_上海关区对外承包工程货物进口报关公司【清关代理吧】

进口清关:退运/返修/一般贸易/对外承包工程专业、专心、专注提供服务上海港/上海海关:对外承包工程进口清关报关有需要看左边:←←←←←←←进口清关报关要注意哪些问题:(同行禁止抄袭及转载)首先:要找一家靠谱、值得…

月均数据_程序员月均薪多少,2019全国互联网行业程序员就业大数据报告

《2019全国互联网行业程序员就业大数据报告》,该报告针对程序员画像、专业背景、职能供需分布、城市分布特征和薪资优势等方面进行分析。作者:子瑜说IT下面,一起来看看,2019年1月-9月程序员的就业现状。01、程序员基础画像“程序媛…

php json 循环输出html,我要用js从json文件中取值,并输出的html页面,有个问题

json文件有多个 0.json 1.json 2.json 3.json ...现在的情况是js可以挨个读取json文件中的内容,但是每次读取新文件的时候之前的文件内容就没了,我想要加载新json文件内容时,保留之前的读出来的内容求大神!!&#xff0…

单分支 两路分支和多分支的if结构_JavaScript学习笔记(二)-- 分支结构

分支结构我们的 js 代码都是顺序执行的(从上到下)逻辑分支就是根据我们设定好的条件来决定要不要执行某些代码IF 条件分支结构if 语句通过一个 if 语句来决定代码执行与否a语法: if (条件) { 要执行的代码 }通过 () 里面的条件是否成立来决定…