Настройка отношений таблиц, что делают «Каскад», «Установить ноль» и «Ограничить»? - PullRequest
47 голосов
/ 21 марта 2011

Я хочу начать использовать табличные отношения в новом проекте.

После некоторого поиска в Google я установил 2 таблицы как InnoDB:

Ключи, которые я хочу связать:

-> users-> userid (primary) -> сеансы-> идентификатор пользователя (индекс)

Единственное, чего я не понимаю в этом процессе, - что различные настройки для «При обновлении» и «При удалении» делают

Варианты здесь:

  • - (ничего?)
  • Каскад (???)
  • Установить ноль (устанавливает все в ноль?)
  • Никаких действий (хорошо, да ...)
  • Ограничить (???)

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

Так что, если кто-нибудь скажет мне, что делают эти опции, будет очень признателен.

Ответы [ 2 ]

119 голосов
/ 21 марта 2011

CASCADE будет распространяться на изменение при изменении родительского элемента.(Если вы удалите строку, строки в ограниченных таблицах, которые ссылаются на эту строку, также будут удалены и т. Д.)

SET NULL устанавливает значение столбца в NULL, когда родительская строка исчезает.

RESTRICT приводит к сбою попытки УДАЛИТЬ родительской строки.

РЕДАКТИРОВАТЬ: Вы не спрашивали о них, но стандарт SQL определяет два других действия: SET DEFAULT и NO ACTION.В MySQL NO ACTION эквивалентно RESTRICT.(В некоторых СУБД NO ACTION является отложенной проверкой, но в MySQL все проверки выполняются немедленно.) Анализатор MySQL принимает SET DEFAULT, но и механизмы InnoDB, и NDB отклоняют эти операторы, поэтому SET DEFAULT на самом деле не может бытьиспользуется для ограничения ON UPDATE или ON DELETE.

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

17 голосов
/ 21 апреля 2014

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

Set NULL : устанавливает значение столбца в NULL при удалении строки родительской таблицы.

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

RESTRICT : RESTRICT приводит к невозможности удаления данного родительская строка , если существует дочерняя строка , которая ссылается на значение для этой родительской строки.

NO ACTION : NO ACTION и RESTRICT очень похожи,когда оператор UPDATE или DELETE выполняется для ссылочной таблицы, в конце выполнения оператора СУБД проверяет, что ни одно из ссылочных отношений не нарушено .в короткой дочерней строке не имеет значения, если родительская строка удалить или обновить .

...