触发连接多个表

时间:2013-07-26 09:06:27

标签: mysql triggers

所以我的数据库中有两个表:'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'中。任何人都可以找出错误吗?任何建议或提示将受到高度赞赏! =]

1 个答案:

答案 0 :(得分:1)

  1. MySql不允许在触发器代码中对您具有该触发器的同一个表进行更改
  2. 您可以通过使用BEFORE事件而非AFTER更改正在插入的行的列值来克服此限制。
  3. 现在要解决在MySql中插入的行的列值,您需要使用NEW关键字。
  4. 据说你的触发器看起来像

    CREATE TRIGGER tg_test1_insert
    BEFORE INSERT ON test1 
    FOR EACH ROW
      SET NEW.originindex = 
         (
           SELECT value 
             FROM cities 
            WHERE city = NEW.origin
         );
    

    这是 SQLFiddle 演示