如何利用mysql的触发器进行两个的表的数据更新

问题遇到的现象和发生背景

創建觸發器upd_total:
order表修改num, price, 或discount後,自動更新money的數據。 order表修改oid後,自動更新money對應的oid。
#money.total=order.numnum.pricenum.discount

这是我的代码但是报错(用的是jupter book):
myc.execute('''
create trigger upd_total after update of oid on orders
for each row update money values(new.oid,new.num*new.price);
''')

create trigger upd_total--触发器名称
 on order --哪个表触发
after update for each row   --update 触发
Begin

if update(num) or update(price) or update(discount) then--如果修改num、price、discount,
--更新money 
update money set total=inserted.num*inserted.price*inserted.discount 
from money inner join  inserted on oid=inserted.oid
end if
--定义两个变量
declare var_oldoid char(10)
declare var_newid char(10)
if update(oid) then--如果更新oid
--保存新的oid 
select var_newid =oid from Inserted
--保存旧的oid 
select var_oldoid =oid from Deleted
--以旧的oid为条件更新money 的oid字段为新的oid
update money set oid=var_newid  where oid=var_oldoid 
end if

end

1)有详细的解释,copy进去就可以运行

-- 建立表 --ps: 不用用order这个表名,某些地方可能是保留字,会冲突
CREATE TABLE `t_order` (
  `oid` int(11) NOT NULL AUTO_INCREMENT,
  `num` int(11) DEFAULT NULL,
  `price` decimal(10,2) DEFAULT NULL,
  `money` decimal(10,2) DEFAULT NULL,
  `discount` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`oid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

-- 准备一条数据
INSERT INTO `t_order` (`num`, `price`, `money`, `discount`) VALUES ('3', '6.00', '14.40', '0.80');

-- 创建触发器,如果存在就删除
DROP TRIGGER if EXISTS upd_total;
-- 执行创建触发器
CREATE TRIGGER upd_total BEFORE UPDATE ON t_order FOR EACH ROW
BEGIN

set new.money = (SELECT new.num * new.price * new.discount FROM t_order WHERE oid = new.oid) ;

END;

-- 测试
-- 测试前数据
SELECT money from t_order where oid =1;
-- 更新一条数据
update t_order set num = 3 where oid = 1;
-- 测试号后
SELECT money from t_order where oid =1;



可以参考如下方式创建,修改同理。

drop trigger if exists insert_user;
create trigger insert_user 
    -- 触发表 user
    after insert on user 
for each row
begin 
    -- 插入目标表、本地:本地数据库.用户表,如需指定字段在后面拼接(本地数据库.用户表.id)
    insert into test.user 
    -- 触发表、远程:远程数据库.用户表,如需指定字段values里直接拼接(远程数据库.用户表.id)
    values(pro.user);
end;

授人以鱼不如授人以渔



【Mysql 触发器-两个数据库的表数据同步-步骤与问题解决】https://mbd.baidu.com/ma/s/VepkdIZW

具体的报错信息没发出来,看看具体报什么错