Основы внешних ключей в MySQL?

Есть ли хорошее объяснение того, как использовать конструкцию внешнего ключа MySQL?

Я не совсем понимаю это из самих документов MySQL. До сих пор я занимался такими вещами, как внешние ключи, со связками и программным кодом.

И вторая часть вопроса: есть ли какие-либо улучшения, связанные с использованием встроенных внешних ключей MySQL?

Ответ 1

FOREIGN KEYS просто убедитесь, что ваши данные согласованы.

Они не улучшают запросы в смысле эффективности, они просто делают неправильные запросы.

Если у вас есть такие отношения:

CREATE TABLE department (id INT NOT NULL)
CREATE TABLE employee (id INT NOT NULL, dept_id INT NOT NULL, FOREIGN KEY (dept_id) REFERENCES department(id))

вы не можете удалить department, если у него есть employee.

Если вы укажете ON DELETE CASCADE в определение FOREIGN KEY, ссылочные строки будут автоматически удалены вместе с указанными.

Как ограничение, FOREIGN KEY фактически немного замедляет запросы.

Дополнительная проверка должна выполняться при удалении из таблицы со ссылками или вставке в ссылочный.

Ответ 2

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

Например, представьте, что вы программируете форум. У вас есть таблица "тем" с основным ключом topics.topic_id, и у вас есть таблица "posts", где сообщения прикрепляются к темам с столбцом posts.topic_id, который является внешним ключом в таблице тем.

Это отношение внешнего ключа гарантирует, что каждое сообщение прикреплено к действительной теме. Если у вас есть только одна тема, у вас есть ID # 1, невозможно создать пост в базе данных, прикрепленной к теме №2. База данных обеспечивает это.

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

Ответ 3

1.FOREIGN KEYS просто гарантируют соответствие ваших данных.

2. Если мы применим к каскаду delete к определению внешнего ключа, ссылка на строку будет автоматически удаляться при удалении родительской строки.

3. Если мы применим обновление Update Cascade к определению внешнего ключа, дочерняя строка будет автоматически обновляться при обновлении родительской строки.

Query: ALTER TABLE дочерний ADD FOREIGN KEY (parent_id) ССЫЛКИ parent (id) ON UPDATE CASCADE ON DELETE CASCADE,

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

Ответ 4

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

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

Это действительно отличная функция, использующая ваш код.

Ответ 5

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

Давайте посмотрим на следующую схему базы данных

У нас есть две таблицы: клиенты и заказы. Каждый клиент имеет ноль или более заказов, и каждый заказ принадлежит только одному клиенту. Связь между таблицей клиентов и таблицей заказов является однозначной, и она устанавливается внешним ключом в таблице заказов, указанной в поле customerNumber. Поле customerNumber в таблице заказов относится к полю первичного ключа customerNumber в таблице клиентов.

Таблица клиентов называется родительской таблицей или ссылочной таблицей, а таблица заказов называется дочерней таблицей или ссылочной таблицей.

Внешний ключ может быть столбцом или набором столбцов. Столбцы в дочерней таблице часто ссылаются на столбцы первичного ключа в родительской таблице.

Таблица может иметь более одного внешнего ключа, и каждый внешний ключ в дочерней таблице может ссылаться на другую родительскую таблицу.