Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Как создать внешние и первичные ключи MySQL: инструкция

4554
7 минут чтения
Средний рейтинг статьи: 2.5

MySQL – это открытая реляционная система управления базами данных (СУБД), которая широко используется для хранения, управления и обработки структурированных данных. Она является одной из самых популярных и широко распространенных СУБД в мире, особенно в сфере разработки приложений и веб-сервисов.  

Работу правильно выстроенной реляционной БД невозможно представить без использования в таблицах таких структурных элементов, как первичные и внешние ключи. В настоящей статье рассмотрим предназначение этих ключей в MySQL, а также процесс их создания и удаления в таблице. Кроме того, для более детального понимания работы ключей, в конце статьи будет приведен конкретный пример их использования в БД.

DBaaS

Запустите свою базу данных в облаке и
оптимизируйте процессы DevOps и CI/CD.

Первичный ключ и его предназначение

Первичный ключ в MySQL – это специальный тип ограничения, который используется для идентификации записей в таблице. Он служит для обеспечения уникальности каждой строки и является основой для связи разных таблиц.

У таких ключей есть ряд отличительных свойств:

  • Уникальность. Значения такого ключа не должны повторяться в таблице.
  • Неизменяемость. В таблице можно выделить только один столбец для такого ключа. Если пользователю требуется два и более таких полей, то он должен использовать составные ключи MySQL. В рамках данной статьи мы не будет заострять на них внимание.
  • Ненулевое значение (Not Null). Значение такого ключа не может быть нулевым (NULL).

Ниже приведем пример таблицы users из некой БД, которая содержит рассматриваемый ключ:

user_id

username

email

birthdate

registration_date

1

example_user1

user1@example.com

1990-05-15

2023-09-19 10:30:13

2

example_user2

user2@example.com

1988-11-30

2023-09-19 11:45:10

3

example_user3

user3@example.com

1999-10-15

2023-09-20 12:15:13

4

example_user4

user4@example.com

1998-12-07

2023-09-20 14:34:56

В этом примере, поле user_id – это и есть первичный ключ, который уникально идентифицирует каждую запись. Так, для пользователя с никнеймом example_user1 был создан user_id, равный 1, для пользователя example_user2 был создан user_id, равный 2, и так далее.

Способы создания первичного ключа

Чтобы создать первичный ключ в MySQL на этапе формирования таблицы, пользователь должен добавить соответствующую строку в команду:

    

Здесь на создание поля с первичным ключом указывает ключевое слово PRIMARY KEY.

Команда ALTER TABLE используется для изменения структуры ранее созданных таблиц и позволяет добавлять, изменять и удалять столбцы, а также устанавливать различные ограничения и индексы. Она также используется и для добавления рассматриваемого ключа. Синтаксис этого процесса представлен ниже:

    

Чтобы удалить этот ключ в MySQL, пользователь также может воспользоваться рассмотренной выше командой:

    

Внешний ключ и его предназначение

Внешний ключ в MySQL – это элемент таблицы, который используется для установления связи с другой таблицей.

Если две таблицы связаны с помощью внешнего ключа, то одну из них, содержащую первичный ключ, принято называть родительской, а другую с внешним ключом – дочерней.

Свойства у рассматриваемого ключа отличны от предыдущего. Он может содержать как нулевые, так и повторяющиеся значения. Помимо этого, количество таких ключей в дочерней таблице может быть больше одного.

Способы создания внешнего ключа

Чтобы создать внешний ключ в MySQL при формировании таблицы, пользователю необходимо добавить следующую запись в команду:

    

Помимо этого способа, можно добавить внешний ключ в MySQL в созданную ранее таблицу. Для этого необходимо воспользоваться уже знакомой командой:

    

Чтобы удалить внешний ключ из таблицы, необходимо воспользоваться следующей командой:

    

При создании внешнего ключа, к нему можно добавить параметры, которые будут задавать действия для строк дочерней таблицы при обновлении (ON UPDATE) или удалении (ON DELETE) строки из главной таблицы. Добавление параметров происходит после оператора REFERENCES. Список возможных параметров представлен ниже:

  • Каскадное удаление (CASCADE)

Если вы удаляете (обновляете) строку из родительской таблицы, то MySQL автоматически удалит (обновит) связанные строки из дочерней таблицы.

  • Установка NULL (SET NULL)

Если вы удаляете (обновляете) строку из родительской таблицы, то MySQL автоматически установит для внешнего ключа в дочерней таблице значение NULL.

  • Ограничение (RESTRICT)

Если вы удаляете (обновляете) строку из родительской таблицы, то MySQL автоматически отменит это действие (выдаст ошибку), если есть связанные строки в дочерней таблице.

  • Без действия (NO ACTION) – аналогична RESTRICT

На этом знакомство с первичным и внешним ключом закончено. Теперь перейдем к практической части статьи, где продемонстрируем применение двух этих ключей.

Пример создания ключей в БД

В данной главе, в качестве примера, создадим БД на сервере Timeweb Cloud

  1. В первую очередь запускаем MySQL на сервере:
    
  1. Далее создадим новую базу данных и сразу перейдем к работе с ней:
    
  1. В качестве примера создадим две базы данных. Первая будет хранить категории сервисов Timeweb Cloud, а вторая – список сервисов разных категорий. 

Image3

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

    

Здесь CategoryID – уникальный идентификатор категории, а CategoryName – ее название. В этом примере, первичный ключ CategoryID понадобится для связи со второй таблицей.

  1. Теперь создадим вторую таблицу:
    

В создаваемой таблице:

  • ServiceID – первичный ключ, идентифицирующий сервис;
  • ServiceName – название сервиса;
  • CategoryID – внешний ключ, связывающий сервис с конкретной категорией. Этот внешний ключ ссылается на столбец CategoryID в таблице «Категории».
  1. Далее заполним обе таблицы тестовыми данным.

Всего у компании выделено три категории сервисов, поэтому для первой таблицы данные будут следующими:

    

Для второй таблицы возьмем несколько сервисов из разных категорий:

    

Теперь созданные таблицы имеют следующий вид:

Image4

  1. И, наконец, проверим работу созданного внешнего ключа. Для этого составим запрос, используя оператор LEFT JOIN, для вывода общей информации о всех сервисах и их категориях в компании:
    

Как итог, получим следующую таблицу:

Image1

Как видно по картинке выше, мы получили объединение двух таблиц, где для каждого сервиса указана категория, к которой она привязана, вместо цифры.

Подготовили для вас выгодные тарифы на DBaaS

Cloud DB 1/1/8

447 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
Диск NVMe
8 ГБ
Приватный IP
Есть
Резервные копии
Есть
Cloud DB 1/2/20

711 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
Диск NVMe
20 ГБ
Приватный IP
Есть
Резервные копии
Есть
Таблица тарифов
Сравнение тарифов
Cloud DB 1/1/8
496
Cloud DB 1/2/20
790
Cloud DB 2/2/30
1160
Cloud DB 2/4/40
1580
Cloud DB 4/8/80
3160
Cloud DB 4/12/120
4240
Cloud DB 6/12/180
5460
Cloud DB 8/16/220
7040
Процессор1 x 3.3 ГГц1 x 3.3 ГГц2 x 3.3 ГГц2 x 3.3 ГГц4 x 3.3 ГГц4 x 3.3 ГГц6 x 3.3 ГГц8 x 3.3 ГГц
Память1 ГБ2 ГБ2 ГБ4 ГБ8 ГБ12 ГБ12 ГБ16 ГБ
Диск NVMe8 ГБ20 ГБ30 ГБ40 ГБ80 ГБ120 ГБ180 ГБ220 ГБ
Приватный IPЕстьЕстьЕстьЕстьЕстьЕстьЕстьЕсть
Резервные копииЕстьЕстьЕстьЕстьЕстьЕстьЕстьЕсть
4554
7 минут чтения
Средний рейтинг статьи: 2.5

Читайте также

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server