我试图为一项看似简单的家庭作业创建几个触发点,但我遇到了一个又一个问题。我本人和我的同学们被授权在PHPMyAdmin中创建一个在线食品订购数据库。作为一门入门课程,这是相当基本的东西,几年前我在一所学校上了一门SQL课程,所以这一切都回到了我的脑海。
尽管我以前有过经验,但我以前从未处理过触发器,也没有使用过PHPMyAdmin,但我已经习惯了它。我的数据库有8个表,但对这种情况唯一重要的是、tbl_employee、和tbl_employee我们的任务是使用一个自动递增的"ID“(主键)和一个用于脚注的varchar(100)来创建。我们应该创建两个触发器:一个用于指示employee表的最新添加项,另一个用于指示何时已从表中删除员工。我们以“在(插入日期)上添加ID = (insert ID)的New”格式在tbl_employee_audit表中记录这些更改。看起来很简单..。
正如我在这篇文章的标题中所指出的,我已经开发了一段代码,当我在PHPMyAdmin的SQL选项卡中运行它时,但是当我试图将它放入触发器时,我会收到一条错误消息,表示第2行(即@varID)的语法是不正确的。以下是我所拥有的:
SET @varDate = CURRENT_DATE();
SET @varID = (SELECT emp_ID FROM tbl_employee WHERE emp_ID = (SELECT MAX(emp_ID) FROM tbl_employee));
SET @string1 = 'New employee with ID = ';
SET @string2 = ' was added on ';
SET @var1 = CONCAT(@string1, @varID, @string2, @varDate);
INSERT INTO tbl_employee_audit(audit_data) VALUES (@var1);我试着在SQL选项卡中创建自己的触发器,但没有成功,所以我一直试图使用触发器选项卡中的“CreateNew触发器”函数。我调用触发器"after_employee_insert",将表设置为"tbl_employee",将时间设置为“后”,将事件设置为“插入”,并试图让我的代码在定义框中工作。
发布于 2022-08-24 20:25:47
首先,您不需要使用触发器中的查询获取最新的emp_ID。您可以在插入过程中使用NEW.emp_ID直接获得它。
在触发器体中,旧的和新的关键字使您能够访问受触发器影响的行中的列。旧的和新的是触发器的MySQL扩展;它们不区分大小写。
请参阅这里
其次,在创建新触发器时,请确保使用DELIMITER $$更改分隔符。MySQL将第一个;分号视为CREATE TRIGGER语句的结尾。
最后,确保使用END$$而不是END;结束CREATE触发器语句,因为我们在第一行中将分隔符更改为$$。然后使用DELIMITER ;将分隔符更改为分号;,并确保在DELIMITER和;之间包含一个空格。
DELIMITER $$
CREATE TRIGGER after_employee_insert AFTER INSERT
ON tbl_employee
FOR EACH ROW
BEGIN
SET @var1 = CONCAT('New employee with ID = ', NEW.emp_ID, ' was added on ',
CURRENT_DATE());
INSERT INTO tbl_employee_audit
(audit_data)
VALUES (@var1);
END$$
DELIMITER ;注意上面的Fiddle语法: PHP驱动程序不支持划界器,因为它不是mysql数据库命令,而是mysql客户端命令。
为delete触发器编写类似的触发器,将触发器更改为AFTER DELETE和OLD.emp_ID。
https://stackoverflow.com/questions/73478566
复制相似问题