千家信息网

怎么创建MySQL的TRIGGER触发器

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章主要讲解了"怎么创建MySQL的TRIGGER触发器",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么创建MySQL的TRIGGER触发器"吧
千家信息网最后更新 2025年11月11日怎么创建MySQL的TRIGGER触发器

这篇文章主要讲解了"怎么创建MySQL的TRIGGER触发器",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么创建MySQL的TRIGGER触发器"吧!

MySQL TRIGGER(触发器)

数据库触发器是数据库中所维护的命名数据库对象,将在修改表中数据时被激活。使用触发器可以提高表中数据的功能和安全性级别。可以使用触发器控制对特定数据的访问权限、执行特定日志记录或对数据本身进行审计。

触发器是在修改表数据时激活的命名数据库对象。它们可以:

Ø 在插入或更新数据之前对数据进行检查并验证删除和更新

Ø 充当数据过滤器,在插入或更新之前修改超出范围的数据

Ø 修改INSERT、UPDATE 和DELETE 的行为方式

Ø 对于不支持外键的存储引擎,模仿外键的行为

Ø 提供日志记录功能

Ø 自动创建汇总表

1.1. 创建触发器

CREATE TRIGGER 语句:

CREATE TRIGGER trigger_name

{ BEFORE | AFTER }

{ INSERT | UPDATE | DELETE }

ON table_name FOR EACH ROW

triggered_statement

示例:

CREATE TRIGGER City_AD AFTER DELETE

ON City FOR EACH ROW

INSERT INTO DeletedCity (ID, Name) VALUES (OLD.ID, OLD.Name);

trigger_name 是为触发器指定的名称,而table_name 是要与触发器关联的表的名称。BEFORE 和AFTER 指示激活触发器的时间(是在触发事件之前或是之后),而INSERT、UPDATE 或DELETE 指示具体的事件。

注:表名OLD 和NEW 是指触发器可查看的虚拟表。这些表分别包含UPDATE 或DELETE语句所修改的数据的旧版本,或INSERT 或UPDATE 语句所添加的数据的新版本。

1.2. 触发器事件

BEFORE 和AFTER

BEFORE 和AFTER 关键字是指触发器的激活时间,相对于数据修改语句(INSERT、UPDATE 或DELETE)将更改写入底层数据库的时间。

BEFORE 关键字可使触发器在涉及的数据修改之前执行。可使用BEFORE 触发器捕获无效数据条目并在写入表之前对其进行更正或拒绝。

- BEFORE INSERT:在添加新数据之前触发

- BEFORE UPDATE:在使用新数据更新(或覆盖)现有数据之前触发

- BEFORE DELETE:在删除数据之前触发

AFTER 关键字定义在数据修改成功后执行的触发器。可使用AFTER 触发器记录或审计数据库中的数据修改。

- AFTER INSERT:在添加新数据之后触发

- AFTER UPDATE:在使用新数据更新(或覆盖)现有数据之后触发

- AFTER DELETE:在删除数据之后触发

1.3. 触发器错误处理

MySQL 按如下方式处理触发器执行期间发生的错误:

Ø BEFORE 触发器失败,则包含相应行操作的事务将回滚。

Ø AFTER 触发器执行,AFTER触发器事件和行操作必须成功执行。

Ø 对于非事务表,事务不可用。只有触发了触发器的语句会回滚。

触发器失败后,MySQL 会回滚包含导致触发器触发的语句的事务。

对于非事务表,无法完成此类回滚。因此,虽然语句失败,但在发生错误之前执行的所有更改仍然会生效。

1.4. 检查触发器

SHOW CREATE TRIGGER trigger_name

此语句返回可用于重新创建指定触发器的具体字符串。您必须知道触发器的名称才能运行此语句;对于SHOW CREATE TRIGGER 语句,不存在LIKE 或WHERE 语法。

SHOW TRIGGERS

此语句为MySQL 扩展。它可返回触发器的特征,如数据库、名称、类型、创建者以及创建和修改日期。此语句有一个优点:可基于LIKE 模式或WHERE 子句中提供的条件来显示特定触发器。如果未指定条件,则此语句会显示所有触发器的信息。

INFORMATION_SCHEMA.TRIGGERS:

此语句包含SHOW 命令所显示的所有数据,能够完整地呈现在所有数据库中可用的触发器。

1.5. 删除触发器

使用如下语法可显式删除触发器:

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name;

使用DROP TRIGGER trigger_name 时,服务器会在当前模式中查找该触发器的名称。如果要删除其他模式中的触发器,请包含模式名称。使用IF EXISTS 可防止因尝试删除不存在的触发器而出现的错误。通过删除针对其定义触发器的表或者包含触发器的数据库,可隐式删除触发器;

1.6. 对触发器的限制

Ø 不允许使用的语句包括:

l SQL 预处理语句

l 显示或隐式COMMIT 和ROLLBACK

l 返回结果集的语句,例如,不包含INTO var_list 子句的SELECT 语句

l FLUSH 语句

l 用于修改要应用触发器的表的语句

l SHOW 语句

Ø 以下更改不会触发触发器:

l 级联外键所导致的更改

l 在基于行的复制过程中导致的更改

请通过使用SELECT ...INTO var_list,或者通过使用游标和FETCH 语句的方法在触发器中处理结果集。

1.7. 触发器权限

Ø 要执行CREATE TRIGGER 和DROP TRIGGER 命令,需要有TRIGGER 权限。

Ø 在触发器中使用OLD 和NEW需要的权限:要使用SET NEW.col_name = value 为列赋值,需要对该列拥有UPDATE 权限;要在表达式中使用NEW.col_name 以引用新的列值,需要对该列拥有SELECT 权限。

感谢各位的阅读,以上就是"怎么创建MySQL的TRIGGER触发器"的内容了,经过本文的学习后,相信大家对怎么创建MySQL的TRIGGER触发器这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

触发器 数据 语句 数据库 名称 权限 事务 更新 事件 模式 激活 错误 关键 关键字 时间 处理 学习 成功 内容 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全导航图 ibm服务器登录账号 恶意删除公司数据库什么罪 互联网络安全监控设备证明文件 月星互联网科技金融 四川城管通软件开发系统 北企互联网科技股份有限公司 数据库查询只读用户 实证分析数据库数据缺失 网络技术三网融合问题 汕头艺炀网络技术 数据库技术实训创建数据库 邯郸市拓源网络技术有限公司 软件开发高端笔记本 中心管理服务器套什么定额 傻瓜式一键安装电影服务器 隐私信息网络安全意识 java 导出批量数据库 湖州系统软件开发创新服务 信息网络安全要求开放源代码 如何做微信小程序软件开发 断电后怎么重启服务器 银川正规软件开发费用 阿里云服务器购买后如何使用视频 opc服务器开发与应用 平面设计和网络技术哪个前景好 浙大的网络安全怎么样 郑州互联网软件开发多少钱 vb连接sql数据库实例 高效利用网络技术
0