Подсказки на компьютерную тематику

Можно подсмотреть, если забыли…

Что такое внешний ключ MySQL

Описание внешнего ключа

    Foreign key (Внешний ключ) в какой-либо таблице — это

  • поле одной таблицы, которое связано с Primary key (Первичным ключом) или Unique (Уникальным ключом) другой таблицы и содержит в себе только значения соответственно этого ключа
  • ссылка на Первичный или Уникальный ключ в другой таблице
  • то, с чьей помощью создаются все связи в БД
  • поле, которое может называться Вторичным ключом
  • атрибут, работающий только в типе таблиц InnoDB в MySQL
  • ключ, индексируемый по умолчанию
  • поле, находящееся в зависимой таблице

Создание двух таблиц с внешним ключом через SQL

Образец кода создания двух таблиц в MySQL

Пример работающего кода, создающего две таблицы и связь между ними

CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(100)
);

CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
amount DOUBLE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

    В коде создания второй зависимой таблицы:

  • после слова FOREIGN KEY указан столбец зависимой таблицы, который станет Внешним ключом
  • после слова REFERENCES прописано имя главной таблицы, с именем поля, на которое будет указывать Внешний ключ
  • далее можно добавить выражения ON DELETE и/или ON UPDATE, которые укажут как действовать при удалении и/или обновлении строки из главной таблицы соответственно

Структура созданных таблиц в MySQL

    После ввода этого кода структура этих таблиц будет выглядеть следующим образом:

  • в таблице customers в поле customer_id стоит золотой ключ
  • в таблице orders в поле order_id стоит золотой ключ
  • в таблице orders в поле customer_id стоит серебряный ключ, потому что это поле является Внешним ключом
  • в графическом дизайнере таблиц появится связь между таблицами customers и orders

Варианты ввода данных в MySQL через PhpMyAdmin и их вывод

    При вводе в таблицу customers значений:

  • в поле customer_id ничего не вводится, т.е. остается пустым
  • в поле customer_name вводится значение Ваня

Тот же ввод в виде кода SQL
INSERT INTO `customers` (`customer_id`, `customer_name`) VALUES (NULL, 'Ваня');
Результат ввода в таблицу customers будет следующий:

customer_id customer_name
1 Ваня

таблица orders останется без записей, т.е. пустая!

    При вводе значений в таблицу orders:

  • в поле order_id ничего не вводится
  • в поле customer_id будет показан выпадающий список со значениями из поля customer_id из главной таблицы customers, и можно вставить только значения оттуда, т.е. 1
  • в поле amount вносится значение 2.6

Тот же ввод в виде кода SQL
INSERT INTO `orders` (`order_id`, `customer_id`, `amount`) VALUES (NULL, '1', '2.6');

    Важно:

  • по умолчанию, для значений Первичного ключа и Внешнего ключа в MySQL стоит ограничение, запрещающее редактирование значений в этих полях!
  • удалить значение Первичного ключа в главной таблице получится, только если у него отсутствует/ранее удален Внешний ключ!

Что такое внешний ключ MySQL

Описание внешнего ключа

    Foreign key (Внешний ключ) в какой-либо таблице — это

  • поле одной таблицы, которое связано с Primary key (Первичным ключом) или Unique (Уникальным ключом) другой таблицы и содержит в себе только значения соответственно этого ключа
  • ссылка на Первичный или Уникальный ключ в другой таблице
  • то, с чьей помощью создаются все связи в БД
  • поле, которое может называться Вторичным ключом
  • атрибут, работающий только в типе таблиц InnoDB в MySQL
  • ключ, индексируемый по умолчанию
  • поле, находящееся в зависимой таблице

Создание двух таблиц с внешним ключом через SQL

Образец кода создания двух таблиц в MySQL

Пример работающего кода, создающего две таблицы и связь между ними

CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(100)
);

CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
amount DOUBLE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

    В коде создания второй зависимой таблицы:

  • после слова FOREIGN KEY указан столбец зависимой таблицы, который станет Внешним ключом
  • после слова REFERENCES прописано имя главной таблицы, с именем поля, на которое будет указывать Внешний ключ
  • далее можно добавить выражения ON DELETE и/или ON UPDATE, которые укажут как действовать при удалении и/или обновлении строки из главной таблицы соответственно

Структура созданных таблиц в MySQL

    После ввода этого кода структура этих таблиц будет выглядеть следующим образом:

  • в таблице customers в поле customer_id стоит золотой ключ
  • в таблице orders в поле order_id стоит золотой ключ
  • в таблице orders в поле customer_id стоит серебряный ключ, потому что это поле является Внешним ключом
  • в графическом дизайнере таблиц появится связь между таблицами customers и orders

Варианты ввода данных в MySQL через PhpMyAdmin и их вывод

    При вводе в таблицу customers значений:

  • в поле customer_id ничего не вводится, т.е. остается пустым
  • в поле customer_name вводится значение Ваня

Тот же ввод в виде кода SQL
INSERT INTO `customers` (`customer_id`, `customer_name`) VALUES (NULL, 'Ваня');
Результат ввода в таблицу customers будет следующий:

customer_id customer_name
1 Ваня

таблица orders останется без записей, т.е. пустая!

    При вводе значений в таблицу orders:

  • в поле order_id ничего не вводится
  • в поле customer_id будет показан выпадающий список со значениями из поля customer_id из главной таблицы customers, и можно вставить только значения оттуда, т.е. 1
  • в поле amount вносится значение 2.6

Тот же ввод в виде кода SQL
INSERT INTO `orders` (`order_id`, `customer_id`, `amount`) VALUES (NULL, '1', '2.6');

    Важно:

  • по умолчанию, для значений Первичного ключа и Внешнего ключа в MySQL стоит ограничение, запрещающее редактирование значений в этих полях!
  • удалить значение Первичного ключа в главной таблице получится, только если у него отсутствует/ранее удален Внешний ключ!