gpt4 book ai didi

mysql - 触发器连接多个表

转载 作者:行者123 更新时间:2023-11-29 13:42:39 26 4
gpt4 key购买 nike

所以我的数据库中有两个表:“test1”和“cities”。我在 test1 中有以下列:“Origin”、“OriginIndex”(我只提到相关的),在城市中:“city”、“value”(同样,仅相关的)。 'cities' 表的 'city' 列中有 5000 个城市,并且在对应于每个城市(如伦敦、巴黎等)的 'value' 列中具有双值(如 0.990、0.345、0.457、1.566)。

假设用户将“London”输入到“test1”表的“Origin”列中。在“城市”表中,伦敦“城市”的“值”为 1.555。现在,我尝试在 phpmyadmin 中触发一个触发器,该触发器将检查“Origin”是否=“city”,如果是,则插入“London”后相应的“值”将存储在“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 网站(本地主机)上的“test1”表的“Origin”列中提供输入时,这并不是将“值”存储到“OriginIndex”中。有人能找出错误吗?任何建议或提示将不胜感激! =]

最佳答案

  1. MySql 不允许在触发器代码内对具有该触发器的同一个表进行更改
  2. 您可以通过使用 BEFORE 事件而不是 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 演示

关于mysql - 触发器连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17877250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com