MySql基础之触发器
MySql基础之触发器
1、触发器概述MySQL从 5.0.2 版本开始支持触发器。MySQL的触发器和存储过程一样,都是嵌入到MySQL服务器的一段程序。触发器是由 事件来触发 某个操作,这些事件包括 ISERT 、 UPDATE 、 DELETE 事件。当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。2、触发器的创建 创建触发器语法代码语言:j
MySql基础之触发器
- MySQL从 5.0.2 版本开始支持触发器。MySQL的触发器和存储过程一样,都是嵌入到MySQL服务器的一段程序。
- 触发器是由 事件来触发 某个操作,这些事件包括 ISERT 、 UPDATE 、 DELETE 事件。
- 当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来实现。
代码语言: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 ;
查看触发器
- 查看当前数据库的所有触发器的定义
SHOW TRIGGERS
- 查看当前数据库中某个触发器的定义
SHOW CREATE TRIGGER 触发器名
- 从系统库information_schema的TRIGGERS表中查询“salary_check_trigger”触发器的信息。
SELECT * FROM information_schema.TRIGGERS;
删除触发器
触发器也是数据库对象,删除触发器也用DROP语句,语法格式如下:
代码语言:javascript代码运行次数:0运行复制DROP TRIGGER IF EXISTS 触发器名称;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent 删除mysql基础事件数据数据库 #感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-20 19:25:44
上一篇:Maven基础配置学习(旧)
推荐阅读
留言与评论(共有 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结构组成的复合语句块 |