什么是触发器

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;

看一下三张表的情况:

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

查看触发器

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

1、SHOW TRIGGERS语句查看触发器

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

SHOW TRIGGERS;

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

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

(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类型的触发器。灵活地运用触发器将为操作省去很多麻烦。

mysql 触发器不能同时 insert or update or delete_MySQL6:触发器相关推荐

  1. mysql 触发器不能同时 insert or update or delete_运维日记|SQL server 那点事——DML触发器...

    11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了--作为一名美创的员工,客户才是第一位,我毫不犹豫的摁下了接听键. ​ X ...

  2. SQLServer之创建INSTEAD OF INSERT,UPDATE,DELETE触发器

    INSTEAD OF触发器工作原理 INSTEAD OF表示并不执行其所定义的操作INSERT,UPDATE ,DELETE,而仅是执行触发器本身,即当对表进行INSERT.UPDATE 或 DELE ...

  3. mysql 注入 update_利用insert,update和delete注入获取数据_MySQL

    0x00 简介 利用SQL注入获取数据库数据,利用的方法可以大致分为联合查询.报错.布尔盲注以及延时注入,通常这些方法都是基于select查询语句中的SQL注射点来实现的.那么,当我们发现了一个基于i ...

  4. MySQL数据库---子查询insert,update,delete语句中嵌套子查询

    十.子查询的使用(重点) 1.子查询:指的是查询语句,嵌套查询语句---->一般是放在where子句中,表示条件. 2.子查询的应用使用场景: 2.1查询过程中,虽然给了条件,但是条件的结果并不 ...

  5. MySQL 数据库常用命令—insert delete update select

    引言 MySQL 数据库和其它的数据库一样,也支持增(insert)删(delete)改(update)查(select)操作. insert 基本语法规则 insert into table_nam ...

  6. mysql 学习笔记04 insert与update语句

    1.插入数据 注意事项: 字符和日期类型, 要用 单引号 括起来 insert into (), (), () 例如: insert into goods values(1, 'abc', 2.2), ...

  7. mysql使用触发器,delete、insert、update触发器

    mysql5之后的版本才支持触发器. 想要某条语句在事件发生时自动执行,可使用触发器. 例如下面场景: 每当增加一条顾客数据时,都检查其号码格式是否正确.每订购一个产品时,都从库存中减去订购的数量无论 ...

  8. 触发器实现两表之间的INSERT,DELETE,UPDATE

    需求说明:培训记录处录入"外出培训"记录,保存后同步外出培训合同至"合同模块" 培训记录表PX_Record创建触发器 步骤一.新建触发器:[insert_ht ...

  9. mysql 5.7 insert_MySQL5.7 支持一个表有多个INSERT/DELETE/UPDATE触发器

    在MySQL5.6版本里,不支持一个表有多个INSERT/DELETE/UPDATE触发器. 例如创建t1表两个INSERT的触发器:DELIMITER $$ USE `test`$$ DROP TR ...

最新文章

  1. R语言单变量分析实战:汇总统计(Summary Statistics)、频率表(Frequency Table)、图表(charts: boxplot、histogram、density)
  2. Eigen: C++开源矩阵计算工具——Eigen的简单用法
  3. 这次,带你做一个属于自己的无人机!
  4. 四宫格效果 css_【深度教研】智力游戏“九宫格” 集体教研活动纪实
  5. Oracle GoldenGate For Big Data - Kafka Handler
  6. 为何身为程序员的你,不选择开源?
  7. linux 静态路由修改
  8. 用于确定两个字符串最长公共子串的函数
  9. python必须要记住的代码_好用到哭!请记住这20段Python代码
  10. SSM框架整合_1MyBatis搭建
  11. 给Matlab添加工具箱Toolbox的方法(有截图详细讲解)(R2019b)
  12. Linux系统编程-第01天(基本命令)
  13. foxmail 总是提示QQ 邮箱需要输入密码
  14. 剑指offe 和为S的连续正数序列
  15. OpenVSwitch与OpenDayLight的连接过程
  16. UMLChina公众号文章精选(20210706更新精选)
  17. 计算机更改开机密码快捷方法,如何对电脑的开机密码进行快速更换
  18. 神经系统分类和组成图表,神经系统的组成概念图
  19. 手机号码归属地查询,免费API
  20. android手机在线什么意思,用安卓手机登录QQ显示“手机在线”,为何苹果就显示iPhone在线?...

热门文章

  1. 我想知道怎么求N的N次方
  2. 图像处理理论-颜色模式
  3. 需要单机还是集群部署_单机、集群和分布式(微服务结构)的区别
  4. C语言二维数组找出交集,【leetcode C语言实现】剑指 Offer 04. 二维数组中的查找...
  5. java 16 binary_【图片】【困扰】java(tm) platform se binary 已停止工作该如何是好【minecraft吧】_百度贴吧...
  6. 深度学习-KNN,K近邻算法简介
  7. 数据结构之堆栈与队列
  8. Singleton 和 Monostate 模式
  9. Arthas 思维导图笔记
  10. C++学习之路 | PTA乙级—— 1023 组个最小数 (20分)(精简)