【问题标题】:update multiple tables with trigger使用触发器更新多个表
【发布时间】:2013-09-30 02:37:09
【问题描述】:

当用户想要更新视图时,我想更新两个表。

create trigger update_mID
instead of update of mID on LateRating
for each row
begin
    update Movie, Rating
    set mID = new.mID
    where mID = Old.mID;
end;

我想更新机器人电影关系和评级关系,但是,我还没有遇到能够更新多个表的触发器。有人可以指出我如何克服这个问题吗?

更新:这是一个测试我的触发器脚本技能的练习。要求是我必须在一个触发器查询中编写它。 @CL。我尝试在 begin 和 end 关键字之间放置两个更新语句,但是,它说存在语法错误.... 有没有特定的方法可以在 begin 和 end 之间放置两个更新?

【问题讨论】:

  • 也许将它们作为两个单独的 sql 更新语句
  • 只是为了确保,您是否假装更新表 Movie 和表 Rating 中的 mID 字段?简单地说,@CL 在BEGINEND; 之间回答。

标签: sql database sqlite triggers


【解决方案1】:

单个UPDATE 语句只能修改单个表。

使用两个UPDATEs:

UPDATE Movie  SET mID = NEW.mID WHERE mID = OLD.mID;
UPDATE Rating SET mID = NEW.mID WHERE mID = OLD.mID;

【讨论】:

  • @Olayinka 要提问,请使用“”按钮。
  • 这与我的问题完全相同。问一个新问题意味着重复。
  • @Olayinka 它适用于我和 SeekingAlpha,所以你正在做一些不同的事情。注释不是调试代码的正确位置。
【解决方案2】:

您可以执行如下REPLACE INTO 语句:

DROP TRIGGER IF EXISTS `update_mID`;CREATE DEFINER=`USER`@`localhost` TRIGGER 
`update_mID` AFTER UPDATE ON `tblname` FOR EACH ROW REPLACE INTO 
USER_DATABASENAME.TBLNAME (COLUMNNAME1,COLUMNNAME1) SELECT COLUMNNAME1,COLUMNNAME1 
FROM USER_DBNAME.TBLNAME

这甚至可以是两个独立的数据库,如下例所示:

DROP TRIGGER IF EXISTS `update_mID`;CREATE DEFINER=`USER`@`localhost` TRIGGER 
`update_mID` AFTER UPDATE ON `tblname from DB1` FOR EACH ROW REPLACE INTO 
USER_DATABASENAME1.TBLNAMEDB2 (COLUMNNAME1,COLUMNNAME1) SELECT 
COLUMNNAME1,COLUMNNAME1 FROM USER_DBNAME2.TBLNAME

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多