我有一个在BEFORE INSERT
other table
的触发器
BEGIN
DECLARE test VARCHAR(3000);
SELECT APPLICATION.APP_DATA into @test FROM APPLICATION WHERE APP_NUMBER=1 LIMIT 1;
END
APP_NUMBER
的类型为INT
,触发器运行时@test
为NULL
。为什么呢?
当我这样做时
SELECT APPLICATION.APP_DATA
FROM APPLICATION
WHERE APP_NUMBER=1 LIMIT 1;`
它会返回正确的值!
答案 0 :(得分:2)
首先,MySQL支持两种不同类型的变量本地和用户(会话)变量。
现在使用DECLARE
定义局部变量test
,然后尝试为会话变量@test
分配值。
我们完全不清楚为什么以及为什么要努力实现目标,但这是一个有效的例子
DELIMITER //
CREATE TRIGGER my_trigger
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
DECLARE test VARCHAR(32);
SELECT app_data INTO test FROM application WHERE app_number = 1 LIMIT 1;
SET NEW.data = test;
END
DELIMITER ;
这是 SQLFiddle 演示