MySQL AFTER INSERT触发器
在MySQL中,每当在表上发生插入事件时,将自动调用After Insert触发器。在本文中,我们将学习如何使用语法和示例创建After Insert触发器。
语法
以下是在MySQL中创建After Insert触发器的语法:
CREATE TRIGGER trigger_name
AFTER INSERT
ON table_name FOR EACH ROW
trigger_body ;
- 首先,我们将指定要创建的触发器的名称。它在模式内必须是唯一的。
- 其次,我们将指定触发器的触发动作时间,应该是AFTER INSERT子句来调用触发器。
- 第三,我们将指定与触发器相关联的表的名称。它必须在ON关键字之后写。如果我们没有指定表名,那么触发器将不存在。
- 最后,我们将指定包含一个或多个语句的触发器体,在触发器激活时执行。
如果我们想要执行多个语句,我们将使用包含一组SQL查询的BEGIN END块来定义触发器的逻辑。请参阅以下语法:
DELIMITER CREATE TRIGGER trigger_name AFTER INSERT
ON table_name FOR EACH ROW
BEGIN
variable declarations
trigger code
END
DELIMITER ;
约束
- 我们可以访问 NEW 的值,但无法在AFTER INSERT触发器中更改它们。
- 如果尝试访问 OLD 的值,将会出错,因为在INSERT触发器上没有OLD。
- 无法在 VIEW 上创建AFTER INSERT触发器。
AFTER INSERT触发器示例
让我们通过一个示例了解如何在MySQL中使用 CREATE TRIGGER 语句创建一个AFTER INSERT触发器。
假设我们已经创建了一个名为 student_info 的表:
CREATE TABLE student_info (
stud_id int NOT NULL,
stud_code varchar(15) DEFAULT NULL,
stud_name varchar(35) DEFAULT NULL,
subject varchar(25) DEFAULT NULL,
marks int DEFAULT NULL,
phone varchar(15) DEFAULT NULL,
PRIMARY KEY (stud_id)
)
接下来,我们将向这个表中插入一些记录,然后执行 SELECT 语句 以查看表中的数据,如下所示:
再一次,我们将按照以下方式创建一个名为 “student_detail” 的新表:
CREATE TABLE student_detail (
stud_id int NOT NULL,
stud_code varchar(15) DEFAULT NULL,
stud_name varchar(35) DEFAULT NULL,
subject varchar(25) DEFAULT NULL,
marks int DEFAULT NULL,
phone varchar(15) DEFAULT NULL,
Lasinserted Time,
PRIMARY KEY (stud_id)
);
接下来,我们将使用 CREATE TRIGGER 语句在 student_info 表上创建一个名为 after_insert_details 的触发器。该触发器将在表上执行插入操作之后触发。
mysql> DELIMITER //
mysql> Create Trigger after_insert_details
AFTER INSERT ON student_info FOR EACH ROW
BEGIN
INSERT INTO student_detail VALUES (new.stud_id, new.stud_code,
new.stud_name, new.subject, new.marks, new.phone, CURTIME());
END //
如果触发器成功创建,我们将得到如下输出:
如何调用插入后触发器?
我们可以使用以下语句来调用上述创建的触发器:
mysql> INSERT INTO student_info VALUES
(10, 110, 'Alexandar', 'Biology', 67, '2347346438');
在更新查询执行后被修改的表是student_detail。我们可以使用以下SELECT语句来验证:
mysql> SELECT * FROM student_detail;
在这个输出中,我们可以看到在向student_info表插入值时,通过触发器自动填充student_detail表的记录。
如何在MySQL Workbench中创建AFTER INSERT触发器?
要使用这个工具创建一个在插入后触发的触发器,我们首先需要启动MySQL Workbench并使用之前创建的用户名和密码登录。我们会看到以下屏幕:
现在按照以下步骤创建一个触发器:
1. 转到导航选项卡,点击包含MySQL服务器中所有可用数据库的 模式菜单 。
2. 选择数据库(例如,mystudentdb),双击它以显示 子菜单 ,包括表、视图、函数和存储过程。请参见下面的屏幕截图。
3. 展开 表子菜单 并选择要创建触发器的表。在选择一个表后,右击所选表(例如,mytsudentdb)然后点击Alter Table选项。请参阅下方图像:
4. 单击 Alter Table 选项,将显示如下屏幕:
5. 现在,点击前面一节的红色矩形框中显示的 触发器选项卡 ,然后选择 插入后的时机/事件 。我们会注意到有一个 (+)图标 按钮可以添加触发器。点击该按钮,我们将得到一个基于所选择的时机/事件的默认触发器代码:
6. 现在,完成触发器代码,再次审查它们,如果没有错误,点击“应用”按钮。
7. 点击“Apply”按钮后,点击 “Finish”按钮 以完成。
8. 如果我们查看模式菜单,我们可以看到以下内容: AFTER_INSERT_detail 触发器位于 student_info 表下方: