MySQL触发+设置变量

时间:2012-05-07 21:44:11

标签: mysql triggers

我在使用触发器从其他表中提取信息时遇到问题,以便在我为特定关系执行插入时插入它们。这基本上是为了让我不必在其他表中查找我需要关系的信息。问题是我在设置一个等于查询结果的变量时遇到问题,然后使用该变量中的值来设置表中的一列。代码看起来像这样。问题是我的变量永远不会被设置它总是为null但是我可以从命令行执行查询并获得结果所以我不确定问题是什么,有人可以指出我做错了什么。 / p>

值得注意的是,关系sales_cost有2个成员模型(主键)VARCHAR(45)和价格FLOAT

DELIMITER $$

USE `mydb`$$

CREATE
DEFINER=`local`@`localhost`
TRIGGER `mydb`.`sales_contract_before`
BEFORE INSERT ON `mydb`.`sales_contract`
FOR EACH ROW
BEGIN

/*variables*/
declare cost float;

/*
SELECT car.model INTO model FROM car where car.id = NEW.car_id;
set NEW.model = model;*/

 set cost = (select price from sales_cost where model = NEW.model);  //cost never gets set its always null


set new.price = cost;

END$$

更新: 我似乎已经弄清楚问题是什么,但仍然想要一些见解(如果有人知道如何实现这一点)问题是因为某些原因使用WHERE限定符如果我在任何set查询中使用WHERE而不管我从中选择的表只是不返回(或返回NULL)。我所做的是创建了一个函数,它接受模型名称,然后通过执行相同的查询返回成本。但是,如果有人能举例说明如何设置一个等于查询结果的变量,那么它的工作原理我真的很感激。我认为这对我来说一定是语法错误,但我对触发器没有足够的了解,可以猜测问题

1 个答案:

答案 0 :(得分:0)

还有另一种方法可以使用像

这样的选择查询来设置多变量
DECLARE var1 INT DEFAULT 0;
DECLARE var2 DATE;
BEGIN
Select id,date From table_name Where id=Id
INTO var1,var2;
END;