MySQL触发器+设置变量

MySQL触发器+设置变量,mysql,triggers,Mysql,Triggers,在为特定关系执行插入操作时,使用触发器从其他表中提取信息以插入它们时,我遇到了一个问题。这基本上是为了避免我在其他表中查找关系所需的信息。问题是,我在设置一个等于查询结果的变量,然后使用该变量中的值设置表中的一列时遇到问题。代码看起来是这样的。问题是我的变量永远不会被设置为空,但我可以从命令行执行查询并得到结果,所以我不确定问题出在哪里。请有人指出我做错了什么 值得注意的是,sales_cost有两个成员modelprimary key VARCHAR45和price FLOAT DELIMIT

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

值得注意的是,sales_cost有两个成员modelprimary key VARCHAR45和price 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限定符,如果我在任何集合查询中使用WHERE,而不管我从中选择的表是什么,它都不会返回或返回NULL。我所做的是创建一个函数,该函数接受模型名,然后通过执行相同的查询返回成本。但是如果有人能给出一个例子,说明如何将变量设置为一个查询的结果,并使用where,我将非常感激。我想这一定是我自己的语法错误,但我对触发器的了解还不够,无法对问题进行猜测

DECLARE var1 INT DEFAULT 0;
DECLARE var2 DATE;
BEGIN
Select id,date From table_name Where id=Id
INTO var1,var2;
END;

不,我不认为这是它的值仍然是空的,在我尝试和设置成本后,我得到一个错误,当试图使用它。我的意思是,我可以使用来自CL的同一个查询并获得一个结果,因此我知道表中有与该查询相对应的内容,但由于某些原因无法在触发器中设置变量。您确定该查询只返回一个结果吗?请发布您收到的错误消息。我收到的错误是试图在表中插入值cost,该值为null,因为它从未被设置。它表示错误列“price”不能为null。也是的,它只返回1个结果我是肯定的,我通过CL和Workbench测试了它。编辑您的答案,添加您的sales_合同表结构,并插入您正在使用的语句。这是自2004年以来确认的严重错误;补丁挂起,两年内没有更新。看见不要屏住呼吸。