Mysql 触发来自不同 table 列的更新的代码
Mysql code to trigger update on column from different table
我使用的数据库有 2 个 table 城市和国家。城市 table 有 ID(PK)、人口和国家代码。国家 table 有代码 (PK) 和人口。
如果城市人口发生更新,国家人口也应该更新 automatically.The 问题是如何在适当的更新语句中实现这一点。
它应遵循以下一般模式:
CREATE TRIGGER diff_pop
AFTER UPDATE
ON city
FOR EACH ROW
...
UPDATE country SET NEW.population=country.population-city_old+city_new
WHERE country.population=new.population;
我认为可能有很多方法可以解决这个问题,因此欢迎任何意见。
CREATE TRIGGER diff_pop
AFTER UPDATE
ON city
FOR EACH ROW
UPDATE country
SET population = population - OLD.population + NEW.population
WHERE country.code = NEW.countrycode;
如果有可能将城市从一个国家迁移到另一个国家,那么
CREATE TRIGGER diff_pop
AFTER UPDATE
ON city
FOR EACH ROW
BEGIN
UPDATE country
SET population = population - OLD.population
WHERE country.code = OLD.countrycode;
UPDATE country
SET population = population + NEW.population
WHERE country.code = NEW.countrycode;
END
PS。不要忘记创建 AFTER INSERT 和 AFTER DELETE 触发器...
That does not work, it is ambiguous syntax according to mysql, since there is no distinction between population column on city and country. – seneca
fiddle。试着反驳一下。
我使用的数据库有 2 个 table 城市和国家。城市 table 有 ID(PK)、人口和国家代码。国家 table 有代码 (PK) 和人口。 如果城市人口发生更新,国家人口也应该更新 automatically.The 问题是如何在适当的更新语句中实现这一点。 它应遵循以下一般模式:
CREATE TRIGGER diff_pop
AFTER UPDATE
ON city
FOR EACH ROW
...
UPDATE country SET NEW.population=country.population-city_old+city_new
WHERE country.population=new.population;
我认为可能有很多方法可以解决这个问题,因此欢迎任何意见。
CREATE TRIGGER diff_pop
AFTER UPDATE
ON city
FOR EACH ROW
UPDATE country
SET population = population - OLD.population + NEW.population
WHERE country.code = NEW.countrycode;
如果有可能将城市从一个国家迁移到另一个国家,那么
CREATE TRIGGER diff_pop
AFTER UPDATE
ON city
FOR EACH ROW
BEGIN
UPDATE country
SET population = population - OLD.population
WHERE country.code = OLD.countrycode;
UPDATE country
SET population = population + NEW.population
WHERE country.code = NEW.countrycode;
END
PS。不要忘记创建 AFTER INSERT 和 AFTER DELETE 触发器...
That does not work, it is ambiguous syntax according to mysql, since there is no distinction between population column on city and country. – seneca
fiddle。试着反驳一下。