MySQL. Связи между таблицами. JOIN’ы

Главная » Видеоуроки » MySQL » MySQL. Связи между таблицами. JOIN’ы
В прошлом уроке мы создали базу данных sport и добавил в нее три таблицы (countries, sports и teams). При этом мы установили связь между таблицами по механизму внешних ключей. Но мы не учли одну проблему — как быть, если мы пытаемся удалить/обновить данные в связанных таблицах. В этом уроке мы немного модифицируем нашу базу данных и сделаем несколько запросов из двух таблиц одновременно.
Чтобы отобразить поведение данных в дочерних таблицах при изменении/удалении данных из связующей родительской таблицы, необходимо при объявлении внешнего ключа дописать ключевые слова — on update cascade on delete restrict. В данном случае мы подразумеваем, что при обновлении данных в родительской таблице данные в дочерней таблицы также будут обновляться, каскадно. А удаление запрещено (restrict). Возможны и другие варианты, например, set null — т.е при удалении поле в дочерней таблице будет установлено в null.
Также мы рассмотрим inner join и right join (также существует left join, похожий по своей сути на right join).
Результатом запроса из двух таблиц при inner join будет общий набор данных из двух таблиц.
При left join в результат попадут все данные из первой таблицы и данные, попавшие под выполнение условия, из второй таблицы. Результирующий набор будет дополКнен данными из второй таблицы со значением NULL.

Код урока

create table countries ( country_id int unsigned not null primary key auto_increment, country_name varchar(255) not null );
insert into countries (country_id, country_name) values (1, 'Россия'),(null, 'Англия'),(null, 'Испания'),(null, 'Италия'), (null, 'Германия'), (null, 'Франция');
create table teams ( team_id int unsigned not null primary key auto_increment, country_id int unsigned not null, team_name varchar(255), foreign key(country_id) references countries(country_id) on update cascade on delete restrict);
insert into teams (team_id, country_id, team_name) values (1, 1, 'ЦСКА'), (null, 2, 'Манчестер Юнайтед'), (null, 3, 'Реал Мадрид'), (null, 4, 'Лацио'), (null, 5, 'Бавария'), (null, 6, 'ПСЖ');
create table players (player_id int unsigned not null primary key auto_increment, team_id int unsigned, country_id int unsigned not null, player_name varchar(255), foreign key(team_id) references teams(team_id) on update cascade on delete set null, foreign key(country_id) references countries(country_id) on update cascade on delete restrict);

0 Комментариев

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Срок проверки reCAPTCHA истек. Перезагрузите страницу.

Pin It on Pinterest

Share This