powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Внешние ключи, удаление дочерних записей
18 сообщений из 18, страница 1 из 1
Внешние ключи, удаление дочерних записей
    #38397606
Harmonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Задача в следующем: как сделать так, чтобы при удалении родительских записей, дочерние оставались не тронутыми? Тобишь нужно вести своеобразный лог событий.
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397614
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Harmoniaкак сделать так, чтобы при удалении родительских записей, дочерние оставались не тронутыми?
Очень просто - НЕ делать так, чтобы удаление родительских записей вызывало каскадное удаление дочерних...
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397640
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Harmoniaдочерние оставались не тронутыми?Совсем нетронутыми нельзя.
См. Using FOREIGN KEY Constraints
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397654
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftСовсем нетронутыми нельзя.Можно. DROP FK.
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397666
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinamiksoftСовсем нетронутыми нельзя.Можно. DROP FK.Ну да, гильотиной можно
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397728
Harmonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaHarmoniaкак сделать так, чтобы при удалении родительских записей, дочерние оставались не тронутыми?
Очень просто - НЕ делать так, чтобы удаление родительских записей вызывало каскадное удаление дочерних...

Прошу прощения, как Вы это себе представляете? Если не указывать ограничения при удалении (on cascade, set null), то это при попытке удалить запись из родительской таблицы (со связанной дочерней) MySQL ругнется и не позволит удалить из родителя запись.
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397730
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HarmoniaЕсли не указывать ограничения при удалении (on cascade, set null), то это при попытке удалить запись из родительской таблицы (со связанной дочерней) MySQL ругнется и не позволит удалить из родителя запись.Так почему же "не указывать" ? Укажите set null.
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397731
Harmonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinamiksoftСовсем нетронутыми нельзя.Можно. DROP FK.

Спасибо, конечно, но drop-ать связь после каждой операции уж точно не вариант:))
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397735
Harmonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftHarmoniaЕсли не указывать ограничения при удалении (on cascade, set null), то это при попытке удалить запись из родительской таблицы (со связанной дочерней) MySQL ругнется и не позволит удалить из родителя запись.Так почему же "не указывать" ? Укажите set null.

Насколько я понимаю тогда связанные удаленные записи в дочерней таблице просто заменятся нулями (в смысле ключевое поле)... а мне нужно хранить данные об операциях!
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397736
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не "после каждой операции", а просто удалить вообще связь. Т.е. внести изменения в структуру БД. Уж коли всё равно целостность планируется развалить нахрен.
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397742
Harmonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaНе "после каждой операции", а просто удалить вообще связь. Т.е. внести изменения в структуру БД. Уж коли всё равно целостность планируется развалить нахрен.

Как вариант конечно можно... Хотя не хотелось бы оставлять несвязанную таблицу...Видимо что-то я не до конца понимаю в этой "реляционности" баз данных:(( Больше путей обхода нет?
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397745
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Связь или есть, или её нет. В нынешней постановке задачи - её нет. Резюме - ужалить внешний ключ.
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397746
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
* удалить
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397750
Harmonia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ясно! Всем спасибо за внимание к моей проблеме!
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397902
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HarmoniaЯсно, всем спасибо! ... и ранее: ... а мне нужно хранить данные об операциях!

Ничё не понял, в какой момент и главное, какое "прозрение" наступило...

Момент №1: Связи в БД, выражаемые констрейнами (родитель-дочка у вас), могут ИЛИ блокировать удаления ИЛИ каскадировать их изменения ИЛИ обращать в нуль. Всё. Никакой другой логики ограничения целостности они не несут. Собственно их задача и есть гарантировать сочетаемость значений в разных полях. Так, так или с нуллом. Это Вам все и написали.

Момент №2: "а мне нужно .." - и? Если Вам нужно сделать какое-то архивирование или логирование операций ... ну так и делайте! Причем тут внешние ключи и способы их работы? Например: выполняется операция удаления родительской записи. Сделайте предварительное логирование этой операции и записей и из дочерних таблиц, и удаляйте себе каскадно через ограничение целостности... кто мешает? Как лучше?

Гы... зависит от текущей архитектуры вашей БД:
1. Клиентом. Операции делаем через прокладку, которая делает логирование;
2. ХП. Операции делаем через вызов ХП, в них же и делаем логирование;
3. Триггерами. Вешаем триггер на удаление в котором и делаем лдоигрование;
... ещё как или смешанные решения;

каждый из способов имеет свои достоинства, недостатки И ограничения. Выбор - за Вами, как архитектором системы. Или за архитектором.
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38397989
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автормогут ИЛИ блокировать удаления ИЛИ каскадировать их изменения ИЛИ обращать в нуль. Всё.

автор[ON DELETE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION

чукча нечетатель?
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38398012
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowавтормогут ИЛИ блокировать удаления ИЛИ каскадировать их изменения ИЛИ обращать в нуль. Всё.

автор[ON DELETE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION

чукча нечетатель?о национальном вопросе: http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html NO ACTION: A keyword from standard SQL. In MySQL, equivalent to RESTRICT.
...
Рейтинг: 0 / 0
Внешние ключи, удаление дочерних записей
    #38398074
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

:)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Внешние ключи, удаление дочерних записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]