如何使用 MySQL After Trigger2025年3月17日 | 阅读 14 分钟 在 MySQL 中,AFTER 触发器是一种在特定事件(特别是表上的 INSERT、UPDATE 或 DELETE 操作)完成后执行的触发器。它允许您定义在事件发生后必须自动执行的操作或过程。在本文中,我们将学习如何在 MySQL 中使用 AFTER 触发器。 MySQL AFTER 触发器的语法和结构triggerName: 您给触发器指定的名称。 triggerTime: 表示触发器应在指定事件之后执行。 triggerEvent: 指定将激活触发器的触发事件。 tableName: 创建触发器的表的名称。 FOR EACH ROW: 表示触发器将针对受触发操作影响的每一行执行。 BEGIN 和 END: 触发器逻辑和操作应写在 BEGIN 和 END 语句之间。 关于 MySQL AFTER 触发器的一些注意事项
MySQL AFTER 触发器的类型MySQL AFTER 触发器有三种类型:AFTER INSERT 触发器、AFTER UPDATE 触发器和 AFTER DELETE 触发器。 1. AFTER INSERT 触发器在 MySQL 中,AFTER INSERT 触发器是一种数据库对象,允许您在将新记录添加到表后自动执行操作。 要在 MySQL 中创建 AFTER INSERT 触发器,您必须使用 CREATE TRIGGER 语句,指定表名、表事件 (INSERT) 和触发时机 (AFTER)。触发器主体可以包含一个或多个用 BEGIN 和 END 关键字括起来的 SQL 语句。 语法 在上面的示例中,"afterInsertTrigger" 是您分配给触发器的名称,"tableName" 是创建触发器的表的名称,"columnName" 是表中特定列的名称。您可以在 BEGIN 和 END 块中定义自定义逻辑和函数。 示例 1 让我们创建两个表:'school_student',其中包含 Id、Name、Class、Age 和 Address 等字段,以及 'school_audit',其中包含 Id 和 audit_description 等字段。 使用给定命令创建 'school_student' 表 表已创建,它将如下图所示
现在,我们将在 'school_student' 表中插入值, 在 'school_student' 表中插入值后,它将如下图所示
现在,我们将使用以下命令创建 'school_audit' 表 表已创建,它将如下图所示
现在我们将创建一个名为 'after_insert_school' 的触发器,该触发器将在新行添加到 'school_student' 表时将审计详细信息插入 'school_audit' 表中。使用以下语句创建触发器 创建触发器后,执行它。 现在,我们将在 'school_student' 表中插入值, 在 'school_student' 表中插入值后,我们将使用给定语句查看表 'school_student' 表将如下图所示; ![]() 由于我们已将触发器应用于 'school_student' 表,因此在 'school_student' 表中插入每一行新数据时,日期和时间都会插入到 'school_audit' 表中。 我们将使用以下语句查看 'school_audit' 表 如下图所示,日期和时间会自动插入到 'school_audit' 表中。 ![]() 示例 2 让我们创建两个表:'factory_worker',其中包含 Id、Name、Age、Address 和 Wage 等字段,以及 'factory_audit',其中包含 Id 和 audit_description 等字段。 使用给定命令创建 'factory_worker' 表 表已创建,它将如下图所示
现在,我们将在 'factory_worker' 表中插入值, 在 'factory_worker' 表中插入值后,它将如下图所示
现在,我们将使用以下命令创建 'factory_audit' 表 表已创建,它将如下图所示
现在我们将创建一个名为 'after_insert_factory' 的触发器,该触发器将在新行添加到 'factory_worker' 表时将审计详细信息插入 'factory_audit' 表中。使用以下语句创建触发器 创建触发器后,执行它。 现在,我们将在 'school_student' 表中插入值, 在 'factory_worker' 表中插入值后,使用给定命令查看表 'factory_worker' 表将如下图所示。 ![]() 由于我们已将触发器应用于 'factory_worker' 表,因此在 'factory_worker' 表中插入每一行新数据时,日期和时间都会插入到 'factory_audit' 表中。 我们将使用以下语句查看 'factory_audit' 表 如下图所示,日期和时间会自动插入到 'factory_audit' 表中。 ![]() 2. AFTER UPDATE 触发器在 MySQL 中,AFTER UPDATE 触发器是一种数据库对象,允许您在将新记录添加到表后自动执行操作。要在 MySQL 中创建 AFTER UPDATE 触发器,您必须使用 CREATE TRIGGER 语句,指定表名、触发时机 (AFTER)、触发事件 (UPDATE) 和触发器主体。触发器主体由一个或多个用 BEGIN 和 END 关键字括起来的 SQL 语句组成。 语法 在上面的示例中,"afterUpdateTrigger" 是您分配给触发器的名称,"tableName" 是创建触发器的表的名称,"columnName" 是表中特定列的名称。您可以在 BEGIN 和 END 块中定义自定义逻辑和函数。 示例 1 让我们创建第一个表 'snacks_details',其中包含 Id、Name、snacks_type、Quantity、Price 和 Calories 等字段。 使用以下命令创建 'snacks_details' 表 表已创建,它将如下图所示
现在,我们将使用给定命令在 'snacks_details' 表中插入值 在 'snacks_details' 表中插入值后,它将如下图所示
现在,我们将创建第二个表 'price_details',其中包含 Id、snacks_id、old_price、new_price 和 updated_date_time 等字段。 表已创建,它将如下图所示
现在,我们将创建一个名为 'after_update_price' 的触发器,该触发器将在 'snacks_details' 表中的数量更新时用于在 'price_details' 表中添加新行。我们将使用以下语句创建触发器 创建触发器后,执行它。 现在,我们将使用以下语句更新 'snacks_details' 表中 'Id=1' 的零食价格 执行上述语句后,让我们使用以下语句检查 'snacks_details' 表 如下图所示,'Id=1' 的价格已更改。 ![]() 现在,让我们使用以下语句检查 'price_details' 表 如下图所示,表中已插入一行,其中包含旧价格和新价格详情。 ![]() 让我们再次更新 'snacks_details' 表中的零食价格。这次我们将使用以下语句更新 'Id=4' 的零食价格 执行上述语句后,让我们使用以下语句检查 'snacks_details' 表 如下图所示,'Id=4' 的价格已更改。 ![]() 现在,让我们使用以下语句检查 'price_details' 表 如下图所示,表中已插入一行,其中包含旧价格和新价格详情。 ![]() 示例 2 让我们创建第一个表 'electrical_appliances',其中包含 Id、Name、Quantity、manufacturing_year 和 Price 等字段。 使用以下命令创建 'electrical_appliances' 表 表已创建,它将如下图所示
现在,我们将使用给定命令在 'electrical_appliances' 表中插入值 在 'electrical_appliances' 表中插入值后,它将如下图所示
现在,我们将创建第二个表 'quantity_details',其中包含 Id、appliances_id、old_quantity、new_quantity 和 updated_date_time 等字段。 表已创建,它将如下图所示
现在,我们将创建一个名为 'after_update_quantity' 的触发器,该触发器将在 'electrical_appliances' 表中的数量更新时用于在 'quantity_details' 表中添加新行。我们将使用以下语句创建触发器 创建触发器后,执行它。 现在,我们将使用以下语句更新 'electrical_appliances' 表中 'Id=2' 的数量 执行上述语句后,让我们使用以下语句检查 'electrical_appliances' 表 如下图所示,'Id=2' 的数量已更改。 ![]() 现在,让我们使用以下语句检查 'quantity_details' 表 如下图所示,表中已插入一行,其中包含旧价格和新价格详情。 ![]() 让我们再次更新 'electrical_appliances' 表的数量。这次我们将使用以下语句更新 'Id=5' 的数量 执行上述语句后,让我们使用以下语句检查 'electrical_appliances' 表 如下图所示,'Id=5' 的数量已更改。 ![]() 现在,让我们使用以下语句检查 'quantity_details' 表 如下图所示,表中已插入一行,其中包含旧数量和新数量详情。 ![]() 3. AFTER DELETE 触发器在 MySQL 中,AFTER DELETE 触发器是一种数据库对象,允许您在将新记录添加到表后自动执行操作。 要在 MySQL 中创建 AFTER DELETE 触发器,您必须使用 CREATE TRIGGER 语句,指定表名、表事件 (DELETE) 和触发时机 (AFTER)。触发器主体可以包含一个或多个用 BEGIN 和 END 关键字括起来的 SQL 语句。 语法 在上面的示例中,"afterDeleteTrigger" 是您分配给触发器的名称,"tableName" 是创建触发器的表的名称,"columnName" 是表中特定列的名称。您可以在 BEGIN 和 END 块中定义自定义逻辑和函数。 示例 1 让我们创建一个名为 'customers' 的表,其中包含 Id、Name、Age 和 Address 等字段。 使用给定命令构建 'customers' 表 表已创建,它将如下图所示
现在,我们将使用给定命令在 'customers' 表中插入值 在 'customers' 表中插入值后,它将如下图所示
现在,我们将创建另一个名为 'backup_data' 的表,该表将存储从 'customers' 表中删除的数据。 'backup_data' 表包含 user_name 和 comments 等字段。 表已创建;它将如下图所示
我们将使用给定语句创建名为 'data_delete' 的触发器 创建触发器后,执行它。 现在,我们将使用给定命令从 'customers' 表中删除数据 现在,我们将使用给定语句查看 'customers' 表 如下图所示,'Id=2' 的数据已删除。 ![]() 现在我们将检查 'backup_data' 表,以查看已删除的数据是否已存储在表中。 我们将使用给定语句查看 'backup_data' 表 如下图所示,已删除的数据已存储在表中。 ![]() 示例 2 让我们创建一个名为 'staff' 的表,其中包含 Id、Name、Age、Address 和 Salary 等字段。 使用给定命令构建 'staff' 表 表已创建,它将如下图所示
现在,我们将使用给定命令在 'staff' 表中插入值 在 'staff' 表中插入值后,它将如下图所示
现在,我们将创建另一个名为 'backup' 的表,该表将存储从 'staff' 表中删除的数据。 'backup' 表包含 User 和 Comments 等字段。 表已创建,它将如下图所示
我们将使用给定语句创建名为 'after_delete' 的触发器 创建触发器后,执行它。 现在,我们将使用给定命令从 'staff' 表中删除数据 现在,我们将使用给定语句查看 'staff' 表 如下图所示,'Id=1' 的数据已删除。 ![]() 现在我们将检查 'backup' 表,以查看已删除的数据是否已存储在表中。我们将使用给定语句查看 'backup' 表 如下图所示,已删除的数据已存储在表中。 ![]() 结论在本文中,我们学习了如何在 MySQL 中使用 AFTER 触发器。我们了解到 AFTER 触发器有三种类型:AFTER UPDATE 触发器、AFTER INSERT 触发器和 AFTER DELETE 触发器。我们通过示例正确理解了每种类型的 AFTER 触发器。 下一个主题Azure MySQL |
我们请求您订阅我们的新闻通讯以获取最新更新。