所以我的数据库中有两个表:'test1'和'cities'。我在test1中有以下列:'Origin','OriginIndex'(我只提及相关的列),以及城市:'city','value'(再次,仅限相关的)。 “城市”表格在“城市”列中有5000个城市,并且在每个城市(如伦敦,巴黎等)的“价值”列中具有双倍值(如0.990,0.345,0.457,1.566)。
因此,假设用户在'test1'表的'Origin'列中输入'London'。在“城市”表中,伦敦“城市”的“价值”为1.555。现在,我试图在phpmyadmin中触发一个触发器,它将检查'Origin'='city',如果是,则在插入'London'后,相应的'value'将存储在'OriginIndex'中。我已经创建了这样的触发器:
CREATE TRIGGER t1
AFTER INSERT ON test1
FOR EACH ROW
BEGIN
UPDATE test1 a, cities b SET a.OriginIndex = b.value WHERE a.Origin = b.city;
END
但是,每次我在php网站(localhost)的'test1'表的'Origin'列中输入时,都不会将'value'存储到'OriginIndex'中。任何人都可以找出错误吗?任何建议或提示将受到高度赞赏! =]
答案 0 :(得分:1)
BEFORE
事件而非AFTER
更改正在插入的行的列值来克服此限制。NEW
关键字。据说你的触发器看起来像
CREATE TRIGGER tg_test1_insert
BEFORE INSERT ON test1
FOR EACH ROW
SET NEW.originindex =
(
SELECT value
FROM cities
WHERE city = NEW.origin
);
这是 SQLFiddle 演示