我正在尝试创建一个mysql触发器。错误代码1064是非常通用的。触发器用于查看是否存在特定键的记录;以及是否确实用该值更新了新插入的行中的特定列。我在触发器打开的同一表上使用select查询。这会引起麻烦吗?以下是代码:
DELIMITER $$
CREATE TRIGGER classid_insert
AFTER INSERT ON courses_semester
FOR EACH ROW
BEGIN
SET @class_id = (SELECT class_id FROM courses_semester WHERE
course_id = NEW.`course_id`
AND `dept_id` = NEW.`dept_id`
AND `univ_id` = NEW.`univ_id`
AND `section_id` = NEW.`section_id`
AND `semester` = NEW.`semester`
AND `year` = NEW.`year`);
IF(@class_id = NULL)
THEN
NEW.class_id = UUID()
ELSE
NEW.class_id = @class_id
END IF;
END
DELIMITER ;发布于 2014-06-13 18:11:03
您的整个触发器代码如下所示。在DELIMITER $$之后和DELIMITER ;之前删除空格。另外,最后一个END需要更改为END $$。而且,它必须是BEFORE触发器,而不是AFTER触发器。
而且,NEW.class_id = UUID()是不正确的,它缺少了SET作为
SET NEW.class_id = UUID();修正的触发代码:
DELIMITER $$
CREATE TRIGGER classid_insert
BEFORE INSERT ON courses_semester
FOR EACH ROW
BEGIN
SET @class_id = (SELECT class_id FROM courses_semester WHERE
course_id = NEW.`course_id`
AND `dept_id` = NEW.`dept_id`
AND `univ_id` = NEW.`univ_id`
AND `section_id` = NEW.`section_id`
AND `semester` = NEW.`semester`
AND `year` = NEW.`year`);
IF(@class_id = NULL)
THEN
SET NEW.class_id = UUID();
ELSE
SET NEW.class_id = @class_id;
END IF;
END $$
DELIMITER ;https://stackoverflow.com/questions/24210800
复制相似问题