我创建了一个mysql触发器来更新插入另一个表中的值:
DROP TRIGGER IF EXISTS `CourseCode`//
CREATE TRIGGER `CourseCode` BEFORE INSERT ON `race`
FOR EACH ROW BEGIN
SET NEW.Course_Code = (
SELECT
course_code
from
tb_course
where
tb_course.course_name = NEW.course_name
)
END
//
这完美无缺。它根据tb_course表返回course_name的4个字符代码。
我正在尝试做的是在另一个表中完全相同的东西,我复制并粘贴触发器并重命名触发器和表(字段名称和类型也相同)但它不起作用:< / p>
DROP TRIGGER IF EXISTS `CourseCode2`//
CREATE TRIGGER `CourseCode2` BEFORE INSERT ON `fields`
FOR EACH ROW
BEGIN
SET NEW.Course_Code = (
SELECT
course_code
from
tb_course
where
tb_course.course_name = NEW.course_name
)
END
//
然而,这导致空值。我已经尝试用字符串替换New.Course_name(即tb_course.course_name =“String”)并更新该静态值,因此触发器似乎正在工作但是它不匹配此表中的select语句或它没有设置Course_Code字段......
您可以建议进行任何调试吗?它让我疯了,我不知道该怎么做来诊断这个问题。
干杯
答案 0 :(得分:0)
我不知道第二个触发器有什么问题。
然而,'调试'部分我可以帮助。
搜索'net'将返回允许单步调试的各种软件(付费)。我想要的只是来自存储的函数过程和触发器内部的'print'语句,而不是为东西付费。
快速搜索引导我到已经完成所有工作的人。
Debugging Stored Procedures in MySql
我刚刚在MySql中进行了设置并尝试了它,它运行正常。
以下是一些示例代码,基于您的触发器和我得到的输出。
DELIMITER $$
USE `testmysql`$$
DROP TRIGGER /*!50032 IF EXISTS */ `CourseCode`$$
CREATE
/*!50017 DEFINER = 'test'@'localhost' */
TRIGGER `CourseCode` BEFORE INSERT ON `race`
FOR EACH ROW BEGIN
DECLARE v_course_code INT;
DECLARE v_course_title VARCHAR(255);
CALL procLog("line 12: Entering CourseCode");
SELECT
course_code, course_title
INTO
v_course_code, v_course_title
FROM
tb_course
WHERE
tb_course.course_name = NEW.course_name;
SET NEW.course_code = v_course_code;
CALL procLog(CONCAT("line_22: ", v_course_title, " code: ", NEW.course_code));
CALL procLog("line 24: Exiting CourseCode");
END;
$$
DELIMITER ;
<强>查询:强>
CALL setupProcLog();
INSERT INTO `race` (course_name, race_info)
VALUES ('learn_it_02', 'this is another test');
CALL cleanup('query end');
procLog输出:
entrytime connection_id msg
2014-02-23 12:32:21 5第12行:进入CourseCode
2014-02-23 12:32:21 5 line_22:Learn It Course 02 code:2
2014-02-23 12:32:21 5第24行:退出CourseCode
2014-02-23 12:32:21 5 cleanup()查询结束
好吧,可能有点笨拙,但它有助于调试“存储”程序。
我将从现在开始使用它。