синхронизация таблиц mysql - PullRequest
       1

синхронизация таблиц mysql

0 голосов
/ 24 февраля 2012

Представьте себе две большие таблицы mysql, импортированные из Excel.

В таблице 1 есть поле SNameID и другие поля, описывающие SNameID (возраст, размер).

SNameID Возраст Размер

В таблице 2 есть поле TeacherID, а для каждого учителя есть / есть SNameID учащегося и поля описания (возраст, размер).

TeacherID SNameID Возраст Размер

Идея такова: в Таблице 2 есть данные TeacherID и информация об отношениях: это его ученики. Это довольно плохая архитектура ... но я должен использовать обе таблицы, так как они дальше.

Скажите, пожалуйста, когда произойдет какое-либо изменение в возрасте и / или размере в любой из таблиц, могу ли я сделать так, чтобы mysql автоматически обновил другую таблицу в соответствии с SNameID?

Я просто не могу понять ... и проблема во многих моих таблицах ... Все, что мне нужно, это подсказка, где или что читать - я могу выяснить это позже и выложу решение здесь а также.

1 Ответ

0 голосов
/ 24 февраля 2012

Вы можете настроить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...