Основы внешних ключей в 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,
- вы не можете удалить прямую родительскую таблицу, сначала удалите внешний ключ из дочерней таблицы, чем удалить родительскую таблицу.
Ответ 4
Основное преимущество заключается в том, что вы можете ограничить, какие значения вы можете ввести в таблицу; если вы попытаетесь ввести значение, которого нет в ссылочной таблице, вы не сможете это сделать.
Кроме того, если вы обновляете или удаляете значение в ссылочной таблице, вы можете установить его для автоматического обновления значения или удаления в каскаде любой строки, содержащей это значение.
Это действительно отличная функция, использующая ваш код.
Ответ 5
Внешний ключ - это поле в таблице, которое соответствует другому полю другой таблицы. Внешний ключ накладывает ограничения на данные в связанных таблицах, что позволяет MySQL поддерживать ссылочную целостность.
Давайте посмотрим на следующую схему базы данных
У нас есть две таблицы: клиенты и заказы. Каждый клиент имеет ноль или более заказов, и каждый заказ принадлежит только одному клиенту. Связь между таблицей клиентов и таблицей заказов является однозначной, и она устанавливается внешним ключом в таблице заказов, указанной в поле customerNumber. Поле customerNumber в таблице заказов относится к полю первичного ключа customerNumber в таблице клиентов.
Таблица клиентов называется родительской таблицей или ссылочной таблицей, а таблица заказов называется дочерней таблицей или ссылочной таблицей.
Внешний ключ может быть столбцом или набором столбцов. Столбцы в дочерней таблице часто ссылаются на столбцы первичного ключа в родительской таблице.
Таблица может иметь более одного внешнего ключа, и каждый внешний ключ в дочерней таблице может ссылаться на другую родительскую таблицу.