现在有ABCD四个表,其中A表中的x,y,z三列数据分别需要对应B表中的x列,C表中的y列和D表中的z列,且BCD三表中的xyz这三列数据变化时,A表中的三列也要相应变化
代码如下,表名和字段改成你自己的即可,案例只是创建一个触发器,你创建三个即可
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`pwd` varchar(255) DEFAULT NULL,
`date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `test1` (
`tid` int(11) NOT NULL,
`user` varchar(255) DEFAULT NULL,
`idtest` varchar(255) DEFAULT NULL,
PRIMARY KEY (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TRIGGER `rel_order` AFTER UPDATE ON `test1` FOR EACH ROW
begin
IF((old.user != new.user) or (old.user IS NULL && new.user IS NOT NULL))
THEN
update test
set date=now()
where id = old.idtest;
END IF;
END;
当test1表中的user字段更新时,更新test表中的date字段。条件是,test1表user更改的那条记录的idtest字段与test的id字段相同,更新
id为idtest的那条date记录。
测试如下
先在test1表中,插一条数据:
INSERT into test1 values(1,"sa","1")
当更新:
UPDATE test1 set user="jdksafdgfg" where tid=1;
触发触发器,实现test表的date字段的更新
可以用触发器,或者修改BCD表的同时,对A表进行修改。
/*创建触发器*/
delimiter $$
create trigger tduStudent before update
on Student for each row
begin
if new.StudentID!=old.StudentID then
update BorrowStudent
set BorrowStudent.StudentID=new.StudentID
where BorrowStudent.StudentID=old.StudentID;
end if;
end$$
触发器和存储过程都可以满足你的需求,一会给你举代码例子
这是个假问题
如果你A表中的xyz三列的值完全来源于BCD表,你的A表中就根本不应该有这3列,而应该使用left join来查询
你的A表根本就应该是个视图