如何使用 MySQL After Trigger

2025年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 触发器的一些注意事项

  • AFTER 触发器与特定事件(例如 INSERT、UPDATE 或 DELETE)相关联,并在事件完成后执行;这意味着如果您创建一个 AFTER INSERT 触发器,它将在新行添加到表后触发并执行。
  • 创建 AFTER 触发器时,您需要指定表名、事件(INSERT、UPDATE、DELETE)和触发时间(AFTER)。您还需要定义应在触发器主体中执行的操作或语句。
  • AFTER 触发器可用于多种目的,例如强制数据完整性约束、记录更改、更新相关表或执行附加计算或验证。
  • MySQL 允许为表上的单个事件定义多个 AFTER 触发器。执行顺序由触发器的创建顺序决定。您可以使用 'SHOW TRIGGERS' 命令查看现有触发器及其执行顺序。
  • 如果 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' 表

表已创建,它将如下图所示

ID名称Class年龄地址
     

现在,我们将在 'school_student' 表中插入值,

在 'school_student' 表中插入值后,它将如下图所示

ID名称Class年龄地址
301Vaishnav812Mathura
302Amisha913Noida
303Disha812勒克瑙
304Kunal1014勒克瑙
305Kairav1015勒克瑙

现在,我们将使用以下命令创建 'school_audit' 表

表已创建,它将如下图所示

IDaudit_description
  

现在我们将创建一个名为 'after_insert_school' 的触发器,该触发器将在新行添加到 'school_student' 表时将审计详细信息插入 'school_audit' 表中。使用以下语句创建触发器

创建触发器后,执行它。

现在,我们将在 'school_student' 表中插入值,

在 'school_student' 表中插入值后,我们将使用给定语句查看表

'school_student' 表将如下图所示;

How to use MySQL After Trigger

由于我们已将触发器应用于 'school_student' 表,因此在 'school_student' 表中插入每一行新数据时,日期和时间都会插入到 'school_audit' 表中。

我们将使用以下语句查看 'school_audit' 表

如下图所示,日期和时间会自动插入到 'school_audit' 表中。

How to use MySQL After Trigger

示例 2

让我们创建两个表:'factory_worker',其中包含 Id、Name、Age、Address 和 Wage 等字段,以及 'factory_audit',其中包含 Id 和 audit_description 等字段。

使用给定命令创建 'factory_worker' 表

表已创建,它将如下图所示

ID名称年龄地址工资
     

现在,我们将在 'factory_worker' 表中插入值,

在 'factory_worker' 表中插入值后,它将如下图所示

ID名称年龄地址工资
401Nakul25Roorkee15000
402Aisha26勒克瑙17000
403Dipika30Meerut16000
404Karan26Roorkee18000
405Avinash32Noida19000

现在,我们将使用以下命令创建 'factory_audit' 表

表已创建,它将如下图所示

IDaudit_description
  

现在我们将创建一个名为 'after_insert_factory' 的触发器,该触发器将在新行添加到 'factory_worker' 表时将审计详细信息插入 'factory_audit' 表中。使用以下语句创建触发器

创建触发器后,执行它。

现在,我们将在 'school_student' 表中插入值,

在 'factory_worker' 表中插入值后,使用给定命令查看表

'factory_worker' 表将如下图所示。

How to use MySQL After Trigger

由于我们已将触发器应用于 'factory_worker' 表,因此在 'factory_worker' 表中插入每一行新数据时,日期和时间都会插入到 'factory_audit' 表中。

我们将使用以下语句查看 'factory_audit' 表

如下图所示,日期和时间会自动插入到 'factory_audit' 表中。

How to use MySQL After Trigger

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' 表

表已创建,它将如下图所示

ID名称零食类型数量价格卡路里
      

现在,我们将使用给定命令在 'snacks_details' 表中插入值

在 'snacks_details' 表中插入值后,它将如下图所示

ID名称零食类型数量价格卡路里
1萨莫萨素食25020.5
2卡乔里素食4100100.2
3Cookies非素食1020050.4
4达希瓦达素食225024.5
5帕尼普里素食1212050.2

现在,我们将创建第二个表 'price_details',其中包含 Id、snacks_id、old_price、new_price 和 updated_date_time 等字段。

表已创建,它将如下图所示

ID零食ID旧价格新价格更新日期时间
     

现在,我们将创建一个名为 'after_update_price' 的触发器,该触发器将在 'snacks_details' 表中的数量更新时用于在 'price_details' 表中添加新行。我们将使用以下语句创建触发器

创建触发器后,执行它。

现在,我们将使用以下语句更新 'snacks_details' 表中 'Id=1' 的零食价格

执行上述语句后,让我们使用以下语句检查 'snacks_details' 表

如下图所示,'Id=1' 的价格已更改。

How to use MySQL After Trigger

现在,让我们使用以下语句检查 'price_details' 表

如下图所示,表中已插入一行,其中包含旧价格和新价格详情。

How to use MySQL After Trigger

让我们再次更新 'snacks_details' 表中的零食价格。这次我们将使用以下语句更新 'Id=4' 的零食价格

执行上述语句后,让我们使用以下语句检查 'snacks_details' 表

如下图所示,'Id=4' 的价格已更改。

How to use MySQL After Trigger

现在,让我们使用以下语句检查 'price_details' 表

如下图所示,表中已插入一行,其中包含旧价格和新价格详情。

How to use MySQL After Trigger

示例 2

让我们创建第一个表 'electrical_appliances',其中包含 Id、Name、Quantity、manufacturing_year 和 Price 等字段。

使用以下命令创建 'electrical_appliances' 表

表已创建,它将如下图所示

ID名称数量生产年份价格
     

现在,我们将使用给定命令在 'electrical_appliances' 表中插入值

在 'electrical_appliances' 表中插入值后,它将如下图所示

ID名称数量生产年份价格
1电视2202345000
2冰箱4202260000
3烤箱5202220000
4咖啡机6202335000
5Blender4202312000

现在,我们将创建第二个表 'quantity_details',其中包含 Id、appliances_id、old_quantity、new_quantity 和 updated_date_time 等字段。

表已创建,它将如下图所示

ID电器ID旧数量新数量更新日期时间
     

现在,我们将创建一个名为 'after_update_quantity' 的触发器,该触发器将在 'electrical_appliances' 表中的数量更新时用于在 'quantity_details' 表中添加新行。我们将使用以下语句创建触发器

创建触发器后,执行它。

现在,我们将使用以下语句更新 'electrical_appliances' 表中 'Id=2' 的数量

执行上述语句后,让我们使用以下语句检查 'electrical_appliances' 表

如下图所示,'Id=2' 的数量已更改。

How to use MySQL After Trigger

现在,让我们使用以下语句检查 'quantity_details' 表

如下图所示,表中已插入一行,其中包含旧价格和新价格详情。

How to use MySQL After Trigger

让我们再次更新 'electrical_appliances' 表的数量。这次我们将使用以下语句更新 'Id=5' 的数量

执行上述语句后,让我们使用以下语句检查 'electrical_appliances' 表

如下图所示,'Id=5' 的数量已更改。

How to use MySQL After Trigger

现在,让我们使用以下语句检查 'quantity_details' 表

如下图所示,表中已插入一行,其中包含旧数量和新数量详情。

How to use MySQL After Trigger

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' 表

表已创建,它将如下图所示

ID名称年龄地址
    

现在,我们将使用给定命令在 'customers' 表中插入值

在 'customers' 表中插入值后,它将如下图所示

ID名称年龄地址
1Rahul21Kanpur
2阿希玛24Kanpur
3萨希尔20Meerut
4尼莎31孟买
5米希尔29勒克瑙

现在,我们将创建另一个名为 'backup_data' 的表,该表将存储从 'customers' 表中删除的数据。

'backup_data' 表包含 user_name 和 comments 等字段。

表已创建;它将如下图所示

用户名评论
  

我们将使用给定语句创建名为 'data_delete' 的触发器

创建触发器后,执行它。

现在,我们将使用给定命令从 'customers' 表中删除数据

现在,我们将使用给定语句查看 'customers' 表

如下图所示,'Id=2' 的数据已删除。

How to use MySQL After Trigger

现在我们将检查 'backup_data' 表,以查看已删除的数据是否已存储在表中。

我们将使用给定语句查看 'backup_data' 表

如下图所示,已删除的数据已存储在表中。

How to use MySQL After Trigger

示例 2

让我们创建一个名为 'staff' 的表,其中包含 Id、Name、Age、Address 和 Salary 等字段。

使用给定命令构建 'staff' 表

表已创建,它将如下图所示

ID名称年龄地址薪金
     

现在,我们将使用给定命令在 'staff' 表中插入值

在 'staff' 表中插入值后,它将如下图所示

ID名称年龄地址薪金
1Aryan25Meerut25000
2卡里什马26Meerut26000
3穆斯坎27Kanpur26000
4萨米尔28勒克瑙28000
5安什28孟买28000

现在,我们将创建另一个名为 'backup' 的表,该表将存储从 'staff' 表中删除的数据。

'backup' 表包含 User 和 Comments 等字段。

表已创建,它将如下图所示

用户注释
  

我们将使用给定语句创建名为 'after_delete' 的触发器

创建触发器后,执行它。

现在,我们将使用给定命令从 'staff' 表中删除数据

现在,我们将使用给定语句查看 'staff' 表

如下图所示,'Id=1' 的数据已删除。

How to use MySQL After Trigger

现在我们将检查 'backup' 表,以查看已删除的数据是否已存储在表中。我们将使用给定语句查看 'backup' 表

如下图所示,已删除的数据已存储在表中。

How to use MySQL After Trigger

结论

在本文中,我们学习了如何在 MySQL 中使用 AFTER 触发器。我们了解到 AFTER 触发器有三种类型:AFTER UPDATE 触发器、AFTER INSERT 触发器和 AFTER DELETE 触发器。我们通过示例正确理解了每种类型的 AFTER 触发器。


下一个主题Azure MySQL