MySQL. Связи между таблицами. Внешние ключи

Главная » Видеоуроки » MySQL » MySQL. Связи между таблицами. Внешние ключи
В этом видеоуроке мы рассмотрим связи между таблицами, виды связей между таблицами и внешние ключи. Связи между таблицами необходимы для более быстрого доступа к данным. Давайте представим, что вы пришли в магазин и хотите купить фрукты. Представьте, что все фрукты у вас находятся в одном ящике. Согласитесь, вам понадобится гораздо больше времени, чтобы найти 10 яблок. Было бы проще взять эти 10 яблок из отдельного ящика с яблоками. Такой же подход используется и при хранении данных в таблицах.
Вспомним прошлый урок — в нем мы создавали таблицу, в котором хранятся команды, страны и игроки. Это был не очень правильный подход к организации хранения данных. Данные в такой таблице получать неудобно и часто затратно по времени. В этом уроке мы «раздробим» данные на сущности — команды, игроки и страны.

Код урока

create database sport;
set names 'utf8';
use sport;
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, 'Франция');
SET NAMES utf8 COLLATE utf8_unicode_ci;
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));
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 not null, country_id int unsigned not null, player_name varchar(255), foreign key(team_id) references teams(team_id), foreign key(country_id) references countries(country_id));
insert into players (player_id, team_id, country_id, player_name) values  (1, 1, 1, 'Игорь Акинфеев'),  (null, 3, 3, 'Криштиану Роналду'),  (null, 6, 4, 'Марко Вератти');
delete from countries where country_id=3; /*Запрос завершится ошибкой, так как имеются связи между таблицами по внешнему ключу*/

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

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

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


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

Pin It on Pinterest

Share This