首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用mysql中的select在insert后创建触发器

使用mysql中的select在insert后创建触发器
EN

Stack Overflow用户
提问于 2014-06-13 17:27:01
回答 1查看 4.1K关注 0票数 0

我正在尝试创建一个mysql触发器。错误代码1064是非常通用的。触发器用于查看是否存在特定键的记录;以及是否确实用该值更新了新插入的行中的特定列。我在触发器打开的同一表上使用select查询。这会引起麻烦吗?以下是代码:

代码语言:javascript
复制
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 ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-13 18:11:03

您的整个触发器代码如下所示。在DELIMITER $$之后和DELIMITER ;之前删除空格。另外,最后一个END需要更改为END $$。而且,它必须是BEFORE触发器,而不是AFTER触发器。

而且,NEW.class_id = UUID()是不正确的,它缺少了SET作为

代码语言:javascript
复制
SET NEW.class_id = UUID();

修正的触发代码:

代码语言:javascript
复制
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 ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24210800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档