触发器当一个表一列数据更改时,另两个表都改

假如有三个表分别是表ABC,当表A的a列否变成是的时候,表B的b列也由否变成是,同时表C的c列+1,可以用触发器完成吗?

那自然是可以的,大致这意思吧,比如通过id关联abc三个表,那就根据id去更新对应值

create or replace trigger TRI_ab
  before   UPDATE on  a
  for each row
declare
  PRAGMA AUTONOMOUS_TRANSACTION;
begin
  if :new.a='是'
    then
      update  b set  b='是' where b.id=new.id;
      update  c set  c=c+1  where b.id=new.id;
   end if;
end TRI_ab ;

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/372180
  • 除此之外, 这篇博客: 如何批量修改文件名?教你一招,轻松解决中的 2.2 删除A、B、C多余列 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述



  • 以下回答由chatgpt基于相关博客总结生成:

    是的,可以使用数据库触发器实现这个功能。具体步骤如下:

    1. 首先,创建一个触发器,并设置在表A上。在MySQL中,可以使用以下语句来创建一个在表A上的触发器:

    CREATE TRIGGER trigger_name AFTER UPDATE ON A FOR EACH ROW BEGIN -- trigger action here END;

    其中"trigger_name"是触发器的名称,"AFTER UPDATE"表示该触发器在UPDATE触发时执行,"FOR EACH ROW"表示该触发器将针对每一行执行。在"BEGIN"和"END"之间编写触发器的执行逻辑。

    1. 在触发器的执行逻辑中,更新表B的b列和表C的c列。可以使用以下两条SQL语句完成:

    ``` -- 更新表B的b列 UPDATE B SET b = '是' WHERE id = NEW.b_id;

    -- 更新表C的c列 UPDATE C SET c = c + 1 WHERE id = NEW.c_id; ```

    其中,"NEW.b_id"和"NEW.c_id"分别表示在更新表A时,该行记录在表B和表C中对应的id,可以使用它们来定位需要更新的记录。

    1. 最后,将触发器应用到表A中:

    ALTER TABLE A ADD TRIGGER trigger_name AFTER UPDATE ON A FOR EACH ROW BEGIN -- trigger action here END;

    注意,这里使用"ALTER TABLE"语句将触发器添加到表A中。

    完成以上步骤后,当表A的a列数据发生变化时,表B的b列将会被更新为"是",表C的c列将会自动加1。保证ABC三个表数据的同步。

    需要注意的是,使用触发器可能会影响数据库性能,建议在创建触发器之前进行详细测试和评估。