Phpmyadmin 触发器

Phpmyadmin Trigger

我需要在 phpmyadmin 中触发 2 tables。

所以有 table storestbl_storefinder_stores.
我想从 table storestbl_storefinder_stores 插入 4 个东西(名称、地址、经度、纬度),我通过此代码在论坛中获得帮助

INSERT INTO tbl_storefinder_stores(store_name, store_address, lat, lon)
SELECT name, address, latitude, longitude
FROM stores;

及其作品!!

但现在我想要一个 触发器 来自动执行此操作,例如: 如果我在 table Stores 中更改或添加任何内容,它会自动更新 table tbl_storefinder_stores,就像 4 件事 (name/adress/longitude/latitude) 的更新程序一样,如何在 phpmyadmin 中执行此操作?

您将需要 2 个触发器

  • 当您在 stores 中添加一条新记录然后将其复制到 tbl_storefinder_stores

  • 当您更新 stores 中的某些数据时,然后将它们也更新为 tbl_storefinder_stores

现在这 2 个 table 之间必须有一个公共密钥,我假设 name 是这里的密钥。 第一个触发器看起来像

delimiter //
create trigger stores_ins after insert on stores
for each row 
begin
 insert into tbl_storefinder_stores
 (store_name, store_address, lat, lon)
 values
 (new.name,new.address,new.latitude,new.longitude);
end;//

delimiter ;

现在更新后会变成这样

delimiter //
create trigger stores_upd after update on stores
for each row
begin
 update tbl_storefinder_stores
 set 
 store_address = new.address,
 lat = new.latitude,
 lon = new.longitude
 where store_name = new.name ;
end;//
delimiter ;

请注意,在第二个触发器中,我已将 name 视为它们之间的公共键,因此如果您更改第一个 table 中的名称,则触发器可能不会更新数据,因为它可能不会在第二个 table 中找到具有修改后名称的行。

因此,如果您仍然想这样做,您可以按照

delimiter //
create trigger stores_upd after update on stores
for each row
begin
 update tbl_storefinder_stores
 set 
 name = new.name,
 store_address = new.address,
 lat = new.latitude,
 lon = new.longitude
 where store_name = old.name ;
end;//
delimiter ;

您只需要更新重复的密钥,对吗?

你可以使用 ON DUPLICATE KEY UPDATE

请访问了解更多详情 here