Как изменить значение во всех связанных таблицах

123
04 января 2020, 15:10

Есть две таблицы groups и students,

groups
id | name  | 
1  | BB-31 | 
2  | BB-32 |
3  | PR-41 |  
students
id | group |
1  | BB-31 | 
2  | PR-41 | 

На groups.name и students.group весит forgeign key. Как сделать что-бы при изменении данных в groups.name они же сразу менялись в students.group?

Answer 1

Очень неправильно вешать связь между таблицам на изменяемое поле вроде name. Обычно в каждую таблицу добавляют так называемый суррогатный ключ, то самое поле id типа INT NOT NULL AUTO_INCREMENT.

По меньшей мере это решение избавит вас от необходимости одновременного изменения полей в связанных таблицах.

Но, если такое изменение всё-таки нужно, используйте внешние ключи с опцией каскадного обновления.

Объявляя таблицу students, опишите внешний ключ:

CREATE TABLE students
(
    id INT NOT NULL AUTO_INCREMENT,
    `group` NOT NULL VARCHAR(100),
    PRIMARI KEY (id),
    FOREIGH KEY (`group`) REFERENCES groups (name) ON UPDATE CASCADE
);

Мы заключаем название поля group в обратные апострофы, потому что оно совпадает с началом ключевого слова GROUP BY.

Теперь, при изменении поля groups.name будет меняться поле students.group у всех студентов из данной группы.

Детали: https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

READ ALSO
Посчитать сумму столбца по неделям, и сгруппировать по id

Посчитать сумму столбца по неделям, и сгруппировать по id

В таблице есть поля : date, id, amountНужно достать запросом сумму amount-ов по неделям, которые превышают 96000

109
Как сделать подклассы класса CSS

Как сделать подклассы класса CSS

Допустим что у меня есть три класса:

134
Парсер сайта на Python через BS

Парсер сайта на Python через BS

друзья Парсю я значит сайт используя Питон, через BS и requests, никого не трогаю Но потом замечаю что при выводе всего кода страницы, отсутствует...

133
Автоматическая прокрутка скролла textarea в html

Автоматическая прокрутка скролла textarea в html

Подгружается с сервера страница с большим обьемом текста в textarea, до 10к строк

128