0

所以我的数据库中有两个表:'test1' 和'cities'。我在 test1 中有以下列:'Origin'、'OriginIndex'(我只提到相关的)和城市:'city'、'value'(同样,仅相关的)。'cities' 表在 'city' 列中有 5000 个城市,并且在对应于每个城市(如伦敦、巴黎等)的 'value' 列中具有双值(如 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' 列中输入时都将“值”存储到 'OriginIndex' 中。任何人都可以找出错误吗?任何建议或提示将不胜感激!=]

4

1 回答 1

1
  1. MySql 不允许在触发器代码中对您拥有该触发器的同一个表进行更改
  2. BEFORE您可以通过更改使用event 而不是插入的行的列值来克服此限制AFTER
  3. 现在要解决在 MySql 中插入的行的列值,您需要使用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演示

于 2013-07-26T09:18:38.753 回答