Подтвердить что ты не робот

Настройка табличных отношений, что делают "Cascade", "Set Null" и "Restrict"?

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

После некоторого googling я получил 2 таблицы, созданные как InnoDB:

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

- > users- > userid (первичный) - > session- > userid (index)

Единственное, что я не понимаю в этом процессе, это то, что различные настройки для "On update" и "On delete" делают

Возможные варианты:

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

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

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

4b9b3361

Ответ 1

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

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

RESTRICT приводит к сбою попытки DELETE родительской строки.

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

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

Ответ 2

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

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

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

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

НЕТ ДЕЙСТВИЯ: НЕТ ДЕЙСТВИЙ и RESTRICT очень похожи. когда в ссылочной таблице выполняется инструкция UPDATE или DELETE, СУБД в конце выполнения оператора проверяет, что не связаны никакие ссылки . в короткой дочерней строке не беспокоится, если родительская строка удалить или обновить.