MySql触发器无法计算
我需要创建一个触发器,根据其他列值计算一个列值。为了获得更高的性能,对数据库进行了一点非规范化。正常化不是这个问题的问题 问题是,我想设置计算出的地址值的值,如果我在其中放入一个常量就可以了。但这些If条款似乎不起作用,我就是看不出问题所在 下面是触发代码。 多谢各位MySql触发器无法计算,mysql,sql,triggers,Mysql,Sql,Triggers,我需要创建一个触发器,根据其他列值计算一个列值。为了获得更高的性能,对数据库进行了一点非规范化。正常化不是这个问题的问题 问题是,我想设置计算出的地址值的值,如果我在其中放入一个常量就可以了。但这些If条款似乎不起作用,我就是看不出问题所在 下面是触发代码。 多谢各位 DELIMITER $$ USE `nth_poi_new_3`$$ DROP TRIGGER /*!50032 IF EXISTS */ `poi_address_creator`$$ CREATE /*!5001
DELIMITER $$
USE `nth_poi_new_3`$$
DROP TRIGGER /*!50032 IF EXISTS */ `poi_address_creator`$$
CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `poi_address_creator` BEFORE INSERT ON `poi`
FOR EACH ROW BEGIN
DECLARE full_address VARCHAR(255);
DECLARE country_string VARCHAR(100);
DECLARE region_string VARCHAR(100);
DECLARE town_string VARCHAR(100);
DECLARE address_string VARCHAR(100);
IF NEW.address <> '' THEN
SET full_address = CONCAT(NEW.address, ",");
END IF;
IF NEW.town_name IS NOT NULL THEN
SET full_address = CONCAT(full_address, NEW.town_name, ",");
ELSEIF NEW.town_id IS NOT NULL THEN
SELECT NAME INTO town_string FROM town WHERE town.town_id = NEW.town_id LIMIT 1;
SET full_address = CONCAT(full_address, town_string, ",");
END IF;
IF NEW.region_name IS NOT NULL THEN
SET full_address = CONCAT(full_address, NEW.region_name, ",");
ELSEIF NEW.region_id IS NOT NULL THEN
SELECT NAME INTO region_string FROM region WHERE region.region_id = NEW.region_id LIMIT 1;
SET full_address = CONCAT(full_address, region_string, ",");
END IF;
IF NEW.country_name IS NOT NULL THEN
SET full_address = CONCAT(full_address, NEW.country_name, ",");
ELSEIF NEW.country_id IS NOT NULL THEN
SELECT NAME INTO country_string FROM country WHERE country.country_id = NEW.country_id LIMIT 1;
SET full_address = CONCAT(full_address, country_string, ",");
END IF;
SET NEW.computed_address = full_address;
END;
$$
DELIMITER ;
在触发代码的底部
END;
$$
DELIMITER ;
应该是
END$$
DELIMITER ;
哎,,
只是回答一下。我必须先初始化full_address变量。我刚做了这个:
DECLARE full_address VARCHAR(255);
但在声明之后,还需要进行初始化:
SET full_address="";
你的代码格式需要一些爱。它是自动生成的方式。我认为问题在于检查空值。语法很好。