【问题标题】:Phpmyadmin TriggerPhpmyadmin 触发器
【发布时间】:2015-08-24 03:12:19
【问题描述】:

我需要 phpmyadmin 中的 2 个表的触发器。

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

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

及其工作!!

但现在我想要一个 trigger 自动执行此操作,例如: 如果我在表 Stores 中更改或添加任何内容,它会自动更新表 tbl_storefinder_stores,例如 4 件事(名称/地址/经度/纬度)的更新程序,如何在 phpmyadmin 中执行此操作?

【问题讨论】:

  • PHPMyAdmin 只是一个允许您使用 MySQL 数据库的 Web 应用程序,您需要为 MySQL 触发器做一个 google。这是official docs
  • 我知道,但我需要有关触发代码 i.stack.imgur.com/lpZD6.png 的帮助

标签: php mysql sql triggers


【解决方案1】:

您将需要 2 个触发器

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

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

现在这两个表之间必须有一个公共键,我假设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 视为它们之间的公共键,因此如果您更改第一个表中的名称,则触发器可能不会更新数据,因为它可能无法在第二个表中找到带有改名。

所以如果你仍然想这样做,你可以这样做

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 ;

【讨论】:

  • 感谢您的回答,有没有办法将 ID 用作公用键,数据库表如下所示:i.stack.imgur.com/lpZD6.png,因为也许如果我在第二个表中编辑第一个表中的名称一个也会改变,还有一个问题是他们有不同的 id 我如何同步
  • 是的,您应该将ID 用于第二个触发器,并将第一个表的 id 存储到第二个表。这样更新操作是针对 ID 而不是名称完成的,并且数据完整性仍然存在。
  • 如果我想同步 ID 并将 ID 用作公共密钥,代码会是什么样子
  • 我看到你在store 表中已经有id,在第二个表中已经有store_id。那么第二张表中的store_id 是第一张表中的id 吗?如果不是,您可能首先需要截断第二个表,然后写入 insert into select from.. 并需要将 store_id 作为 id 从存储中插入。
  • 如果我想要,我现在在我的 PHP 页面中有一个错误编辑:数组([0] => 无效查询:'where 子句'中的未知列'name')更新存储 SET name= 'TEST55',cat_id='0',address='多特蒙德',telephone='',email='',website='',description='',@987654347 @='51.5135872', longitude='7.465298100000041', approved='1', modified='2015-06-09 11:05:48' 其中id=733
【解决方案2】:

你只需要更新重复键吗?

你可以使用 ON DUPLICATE KEY UPDATE

请访问以获取更多详细信息 here

【讨论】:

  • 这应该是评论而不是回答!
猜你喜欢
  • 2014-02-02
  • 2013-11-26
  • 2017-09-06
  • 2018-03-04
  • 2013-05-16
  • 2015-10-16
  • 2014-09-17
  • 2011-07-10
  • 2020-07-09
相关资源
最近更新 更多