2012-02-24 46 views
0

所以想象从Excel导入2个大型MySQL表。mysql表同步

表1具有字段SNameID和描述SNameID(Age,Size)的其他字段。

SNameID年龄大小

表2有场TeacherID,并为每个老师有/有学生/ s的SNameID和描述字段(年龄,大小)。

TeacherID SNameID年龄大小

的想法是:表2有TeacherID信息和关系信息:这是他的学生。这是一个相当糟糕的体系结构......但我必须使用两个表格,因为它们更进一步。

请告诉我,当任何表中的年龄和/或大小发生变化时,我可以根据SNameID自动更新另一个表吗?

我只是无法弄清楚......以及它在我的许多表格中的问题......我所需要的只是提示阅读地点或内容 - 之后我可以计算出它的结果并发布解决方案这里也是如此。

+0

您是否尝试过使用触发器? – Pentium10 2012-02-24 16:46:52

+0

最后我做了很难的事情 - 当我更新一些数据时,我执行更新查询和其他几个查询来更新其他表中的相同数据。它工作正常。 – Sergiu 2012-03-21 15:58:31

回答

0

你可以设置一个TRIGGER AFTER UPDATE自动同步数据变化:

DELIMITER | 
DROP TRIGGER IF EXISTS `teacher_update`| 
CREATE TRIGGER `teacher_update` AFTER UPDATE ON `teacher` 
FOR EACH ROW 
BEGIN 
    UPDATE student s SET s.Age = NEW.Age, s.Size = NEW.Size WHERE s.SNameID = NEW.SNameID; 
END; 
| 
DROP TRIGGER IF EXISTS `student_update`| 
CREATE TRIGGER `student_update` AFTER UPDATE ON `student` 
FOR EACH ROW 
BEGIN 
    UPDATE teacher t SET t.Age = NEW.Age, t.Size = NEW.Size WHERE t.SNameID = NEW.SNameID; 
END; 
| 
delimiter; 

但是,你真正应该做的是规范这个数据库的设计。

teacher表中删除AgeSize领域,当你选择,获取使用外键从student表中的信息。

SELECT t.*, s.* FROM teacher t LEFT JOIN student s ON t.SNameID = s.SNameID 
+0

Danke Kaii!它是! – Sergiu 2012-02-24 17:07:15

+0

@Sergiu欢迎来到StackOverflow!如果你喜欢这个答案,并且我能够帮助你,请点击答案旁边的复选标记以接受答案。 – Kaii 2012-02-29 08:43:33