仔细看看9楼的代码
CREATE TRIGGER `updat`
AFTER UPDATE ON `b`
FOR EACH ROW
BEGIN
IF NEW.price<>OLD.price THEN
select num into @num from a where a.id=old.id;
update c set c.ttl=@num*NEW.price where id=old.id;
END IF;
END
否则用连接替换
建议在ID上建立索引,用连接进行替换,
用TRIGGER思路是一样的
or
CREATE TRIGGER `updat`
AFTER UPDATE ON `b`
FOR EACH ROW
BEGIN
IF NEW.price<>OLD.price THEN
select num into @num from a where a.id=old.id;
update c set c.ttl=@num*NEW.price where id=old.id;
END IF;
END
上边的错了 -->
CREATE TRIGGER `updat`
AFTER UPDATE ON `b`
FOR EACH ROW
BEGIN
IF NEW.price<>OLD.price THEN
update c inner join b on c.id=b.id inner join a on a.id=c.id set c.ttl=a.num*b.price ;
END IF;
END
我的意思是,例如
CREATE TRIGGER `updat`
AFTER UPDATE ON `c`
FOR EACH ROW
BEGIN
IF NEW.b_sid<>OLD.b_sid THEN
update c inner join b on c.id=b.id inner join a on a.id=c.id set c.ttl=a.num*b.price ;
END IF;
END
这样连接出来的num值不对么,不太明白你的意思
不好意思,我不大明白你的意思:
delimiter //
create trigger tri_b_upd_af after update on b for each row
update c set ttl=new.price*num -- (这个num按我的理解,是获取不到的)
end//
把连接写到触发器中?比如,我们在前台改变了一下价格,如果是用连接方式,我们就得利用事务,把这一个逻辑封装。但是连接显然是牵扯的面太广,不是一个很理想的方式.
update c inner join b on c.id=b.id inner join a on a.id=c.id
set c.ttl=a.num*new.price
直接替换不行?
update c inner join b on c.id=b.id inner join a on a.id=c.id
set c.ttl=a.num*b.price