您现在的位置是:首页 > 编程 > 

MySql基础之触发器

2025-07-21 06:22:48
MySql基础之触发器 1、触发器概述MySQL从 5.0.2 版本开始支持触发器。MySQL的触发器和存储过程一样,都是嵌入到MySQL服务器的一段程序。触发器是由 事件来触发 某个操作,这些事件包括 ISERT 、 UPDATE 、 DELETE 事件。当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。2、触发器的创建 创建触发器语法代码语言:j

MySql基础之触发器

1、触发器概述
  • MySQL从 5.0.2 版本开始支持触发器。MySQL的触发器和存储过程一样,都是嵌入到MySQL服务器的一段程序。
  • 触发器是由 事件来触发 某个操作,这些事件包括 ISERTUPDATEDELETE 事件。
  • 当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。
2、触发器的创建

创建触发器语法

代码语言:javascript代码运行次数:0运行复制
CREATE TRIGGER 触发器名称 
{BEFORE|AFTER} {ISERT|UPDATE|DELETE} O 表名 
FOR EACH ROW 
触发器执行的语句块;
  • 表名 :表示触发器监控的对象。
  • BEFORE|AFTER :表示触发的时间。BEFORE 表示在事件之前触发;AFTER 表示在事件之后触发。
  • ISERT|UPDATE|DELETE :表示触发的事件。
    • ISERT 表示插入记录时触发;
    • UPDATE 表示更新记录时触发;
    • DELETE 表示删除记录时触发。
  • 触发器执行的语句块 :可以是单条SQL语句,也可以是由BEGI…ED结构组成的复合语句块。

代码举例

举例1:

1、创建数据表:

代码语言:javascript代码运行次数:0运行复制
CREATE TABLE test_trigger ( 
id IT PRIMARY KEY AUTO_ICREMET, 
t_note VARCHAR(0) 
);

CREATE TABLE test_trigger_log ( 
id IT PRIMARY KEY AUTO_ICREMET, 
t_log VARCHAR(0) 
);

2、创建触发器:创建名称为before_insert的触发器,向test_trigger数据表插入数据之前,向 test_trigger_log数据表中插入before_insert的日志信息。

代码语言:javascript代码运行次数:0运行复制
DELIMITER // 

CREATE TRIGGER before_insert 
BEFORE ISERT O test_trigger 
FOR EACH ROW 
BEGI 
	ISERT ITO test_trigger_log (t_log) 
	VALUES('before_insert'); 
ED // 

DELIMITER ;

、向test_trigger数据表中插入数据

代码语言:javascript代码运行次数:0运行复制
ISERT ITO test_trigger (t_note) 
VALUES ('测试 BEFORE ISERT 触发器');

4、查看test_trigger_log数据表中的数据

代码语言:javascript代码运行次数:0运行复制
mysql> SELECT * FROM test_trigger_log; 
+----+---------------+
| id | t_log | 
+----+---------------+
| 1 | before_insert | 
+----+---------------+
1 row in set (0.00 sec)

举例2: 定义触发器“salary_check_trigger”,基于员工表“employees”的ISERT事件,在ISERT之前检查将要添加的新员工薪资是否大于他领导的薪资,如果大于领导薪资,则报sqlstate_value为’HY000’的错误,从而使得添加失败。

代码语言:javascript代码运行次数:0运行复制
DELIMITER // 

CREATE TRIGGER salary_check_trigger 
BEFORE ISERT O employees 
FOR EACH ROW 
BEGI 
	DECLARE mgrsalary DOUBLE; 
	SELECT salary ITO mgrsalary 
	FROM employees WHERE employee_id = _id; 

	IF EW.salary > mgrsalary THE 
		SIGAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '薪资高于领导薪资错误'; 
	ED IF; 
ED // 

DELIMITER ;
、查看、删除触发器

查看触发器

  • 查看当前数据库的所有触发器的定义
代码语言:javascript代码运行次数:0运行复制
SHOW TRIGGERS
  • 查看当前数据库中某个触发器的定义
代码语言:javascript代码运行次数:0运行复制
SHOW CREATE TRIGGER 触发器名
  • 从系统库information_schema的TRIGGERS表中查询“salary_check_trigger”触发器的信息。
代码语言:javascript代码运行次数:0运行复制
SELECT * FROM information_schema.TRIGGERS;

删除触发器

触发器也是数据库对象,删除触发器也用DROP语句,语法格式如下:

代码语言:javascript代码运行次数:0运行复制
DROP TRIGGER IF EXISTS 触发器名称;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent 删除mysql基础事件数据数据库

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1162418.html

相关标签:无
上传时间: 2025-07-20 19:25:44
留言与评论(共有 12 条评论)
本站网友 价格在线
5分钟前 发表
ISERT|UPDATE|DELETE :表示触发的事件
本站网友 打美女光屁屁
2分钟前 发表
都是嵌入到MySQL服务器的一段程序
本站网友 金沙论坛
18分钟前 发表
BEFORE 表示在事件之前触发;AFTER 表示在事件之后触发
本站网友 肾上腺疾病
6分钟前 发表
创建触发器:创建名称为before_insert的触发器
本站网友 搜索枯肠
9分钟前 发表
触发器执行的语句块 :可以是单条SQL语句
本站网友 耒阳租房
24分钟前 发表
代码语言:javascript代码运行次数:0运行复制DELIMITER // CREATE TRIGGER before_insert BEFORE ISERT O test_trigger FOR EACH ROW BEGI ISERT ITO test_trigger_log (t_log) VALUES('before_insert'); ED // DELIMITER ;
本站网友 海南椰岛
22分钟前 发表
创建数据表:代码语言:javascript代码运行次数:0运行复制CREATE TABLE test_trigger ( id IT PRIMARY KEY AUTO_ICREMET
本站网友 移动相册
28分钟前 发表
t_log VARCHAR(0) );2
本站网友 b超单
1分钟前 发表
t_note VARCHAR(0) ); CREATE TABLE test_trigger_log ( id IT PRIMARY KEY AUTO_ICREMET
本站网友 云横秦岭家何在
4分钟前 发表
需要自动执行一些数据库逻辑时
本站网友 16个去除痘印的小妙招
27分钟前 发表
也可以是由BEGI…ED结构组成的复合语句块