从字段类型为INT的表中选择

时间:2014-10-08 15:55:52

标签: mysql sql triggers

我有一个在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,触发器运行时@testNULL。为什么呢?

当我这样做时

SELECT APPLICATION.APP_DATA 
  FROM APPLICATION 
 WHERE APP_NUMBER=1 LIMIT 1;` 

它会返回正确的值!

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 演示