想象一下从 Excel 导入的 2 个大 mysql 表。
Table1 具有字段 SNameID,以及描述 SNameID 的其他字段(年龄、尺寸)。
SNameID 年龄大小
表 2 具有字段 TeacherID,每个教师都有学生的 SNameID 和描述字段(年龄、体型)。
TeacherID SNameID 年龄大小
想法是:Table2有TeacherID数据和关系信息:这是他的学生。这是一个非常糟糕的架构......但我必须使用这两个表,因为它们更进一步。
请告诉我,当任何一个表的Age和/或Size发生变化时,我可以让mysql根据SNameID自动更新另一个表吗?
我只是想不出来......这是我的许多表中的问题......我所需要的只是提示在哪里或读什么内容 - 我可以稍后弄清楚并将在这里发布解决方案也是如此。
最佳答案
您可以设置 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;
但是,您真正应该做的是标准化此数据库设计。
删除Age
和Size
来自 teacher
的字段表,当您 SELECT 时,从 student
获取信息使用外键的表。
SELECT t.*, s.* FROM teacher t LEFT JOIN student s ON t.SNameID = s.SNameID
关于mysql表同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9434525/