mysql表同步

标签 mysql synchronization relationship

想象一下从 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;

但是,您真正应该做的是标准化此数据库设计。

删除AgeSize来自 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/

相关文章:

mysql - Sequelize : select models with a given number of matching children

mysql - 如何在不使用 ENUM 的情况下强制执行 MySQL 表中的某些字符串?

mysql - 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

java - native 方法同步

java - 没有 volatile 变量的同步中断

php - TCG\Voyager 没有得到关于关系的翻译

php - zend 左连接计数不起作用

objective-c - 更改@synchronized 部分中的锁定对象

php - Laravel Eloquent ORM 中的 Multi-Tenancy 关系

ios - 如何创建一个核心数据模型,其父实体和关系