如何使用 MySQL BEFORE 触发器?2025年3月17日 | 阅读 10 分钟 在 MySQL 中,BEFORE 触发器是一个数据库对象,您可以定义它在指定事件(例如 UPDATE、INSERT 或 DELETE)发生之前自动执行。触发器允许您根据数据库中发生的特定事件来执行自定义代码或执行某些操作。 BEFORE 触发器在实际操作执行之前执行,可用于修改数据或执行额外的验证或计算。在本文中,我们将学习如何使用 MySQL BEFORE 触发器。 MySQL BEFORE 触发器的语法和结构triggerName: 这是您分配给触发器的名称。 triggerTime: 指示触发器应在指定事件之前执行。 triggerEvent: 它指定第一个触发器要触发的数据库事件。 tableName: 这是应用触发器的表的名称。 FOR EACH ROW: 它决定了触发器应该为每一行受影响的行执行。 BEGIN 和 END: 包含一个或多个 SQL 语句的触发器主体。 关于 MySQL BEFORE 触发器的一些注意事项
MySQL BEFORE 触发器的类型MySQL BEFORE 触发器有三种类型:BEFORE INSERT 触发器、BEFORE UPDATE 触发器和 BEFORE DELETE 触发器。 1. BEFORE INSERT 触发器在 MySQL 中,BEFORE INSERT 触发器是一个数据库对象,它允许您在对表执行插入操作之前自动执行操作。它是一种数据库触发器,在数据实际插入表之前触发。 当在表上定义了 INSERT 触发器时,该触发器将在实际插入发生之前执行。它允许您修改要插入的数据或根据特定条件执行其他操作。 语法 在上面的示例中,“triggerName”是您分配给触发器的名称,“tableName”是创建触发器的表的名称,“columnName”是表中特定列的名称。您可以在 BEGIN 和 END 块中定义自定义逻辑和函数。 示例 1 让我们创建一个名为 'train_passengers' 的表,其中包含 Id、Name、Address 和 ticketCharges 等字段。使用给定的语句创建表 表已创建,它将如下图所示
在 'train_passengers' 表中插入值后,它将如下所示:
现在,我们将创建一个名为 'train_ticket' 的触发器,当在新乘客记录插入到表中时,它会将票价扣除 ₹1000。使用给定的语句创建触发器 创建触发器后,执行它。 现在,我们将使用给定的命令向 'train_passengers' 表插入一条新记录 使用以下语句查看结果 如下所示,新票价已扣除 ₹1000。 ![]() 示例 2 让我们创建一个名为 'employees' 的表,其中包含 Id、Name、Age、Address 和 Income 等字段。 使用给定的命令创建 'employees' 表 表已创建,它将如下图所示
现在,我们将使用给定的命令在 'employees' 表中插入值 在 'employees' 表中插入值后,它将如下所示:
我们将创建一个名为 'income_update' 的触发器,用于更新表中新员工的薪水。如果新员工的薪水低于 30000,则新员工的薪水将更新为 30000。我们将使用以下语句创建触发器 创建触发器后,执行它。 现在,我们将使用以下语句向 'employees' 表插入一条新记录 执行上述语句后,我们将使用以下语句显示 'employees' 表 如下所示,添加到表中的新员工的收入已更新为 30000。 ![]() 2. BEFORE UPDATE 触发器在 MySQL 中,BEFORE UPDATE 触发器是与特定表关联的数据库对象,它在对该表执行 UPDATE 操作之前自动执行操作。它允许您定义必须在修改表中的数据之前应用的自定义操作。 语法 在上面的示例中,“triggerName”是您分配给触发器的名称,“tableName”是创建触发器的表的名称,“columnName”是表中特定列的名称。您可以在 BEGIN 和 END 块中定义自定义逻辑和函数。 示例 1 让我们创建一个名为 'Laptops' 的表,其中包含 Id、ModelNumber、ModelName、Price、Insurance 和 Quantity 等字段。 使用给定的命令创建 'Laptops' 表 表已创建,它将如下图所示
现在,我们将使用给定的命令在 'Laptops' 表中插入值 在 'Laptops' 表中插入值后,它将显示如下:
我们将创建一个名为 'Validate' 的触发器,用于更新表中笔记本电脑的价格。我们将使用以下语句创建触发器 现在,我们将使用以下命令更新笔记本电脑价格 如您所见,由于价格低于 1000,将显示错误。 ![]() 现在,使用以下命令查看 'Laptops' 表,以查看价格是否已更改。 如您所见,价格保持不变。 ![]() 示例 2 让我们创建一个名为 'staff' 的表,其中包含 Id、Name、Age、Address 和 Wage 等字段。 使用给定的命令构建 'staff' 表 表已创建,它将如下图所示
现在,我们将使用给定的命令在 'staff' 表中插入值 在 'staff' 表中插入值后,它将如下所示:
我们将创建一个名为 'update_wage' 的触发器,用于根据特定条件更新表中员工的工资。我们将使用给定的语句创建触发器 现在,我们将使用给定的命令更新员工工资 现在,使用以下命令查看 'staff' 表,以查看工资是否已更改。 如您所见,Id=2 的员工的工资已更改。 ![]() 3. BEFORE DELETE 触发器在 MySQL 中,BEFORE DELETE 触发器是与表关联的数据库对象,它设计在对表执行 DELETE 操作之前自动执行操作。 语法 在上面的示例中,“triggerName”是您分配给触发器的名称,“tableName”是创建触发器的表的名称,“columnName”是表中特定列的名称。您可以在 BEGIN 和 END 块中定义自定义逻辑和函数。 示例 1 让我们创建一个名为 'customers' 的表,其中包含 Id、Name、Age、Address 和 PhoneNumber 等字段。 使用给定的命令构建 'customers' 表 表已创建,它将如下图所示
现在,我们将使用给定的命令在 'customers' 表中插入值 在 'customers' 表中插入值后,它将如下所示:
我们将使用给定的语句创建一个名为 'before_delete' 的触发器 现在,我们将使用给定的命令从 'customers' 表中删除 如您所见,应用 DELETE 触发器后会显示错误。 ![]() 现在,我们将使用给定的语句查看 'customers' 表 如下所示,没有任何内容被删除。 ![]() 示例 2 让我们创建一个名为 'labour' 的表,其中包含 Id、Name、Age、Address 和 Payment 等字段。 使用给定的命令构建 'labour' 表 表已创建,它将如下图所示
现在,我们将使用给定的命令在 'labour' 表中插入值 在 'labour' 表中插入值后,它将如下所示:
我们将使用给定的语句创建一个名为 'before_delete' 的触发器 现在,我们将使用以下命令从 'labour' 表中删除 如您所见,应用 DELETE 触发器后会显示错误。 ![]() 现在,我们将使用给定的语句查看 'labour' 表 如下所示,没有任何内容被删除。 ![]() 结论在本文中,我们学习了如何使用 MySQL BEFORE 触发器。我们了解到 BEFORE 触发器有三种类型:BEFORE UPDATE 触发器、BEFORE INSERT 触发器和 BEFORE DELETE 触发器。我们通过示例已充分理解了每种 BEFORE 触发器的类型。 |
我们请求您订阅我们的新闻通讯以获取最新更新。