Цепные модификации в реляционной базе данных - PullRequest
1 голос
/ 17 июня 2011

Предположим, что у нас есть 3 связанных таблицы таким образом в MySQL:

Table 1:         Table 2:          Table 3:
-------------    -------------     -------------
UserID      |    ProfileID   |     ArticleID   |
-------------    -------------     -------------
Username    |    UserID      |     UserID      |
-------------    -------------     -------------
Password    |    UserAvatar  |     Article     |
-------------    -------------     -------------

Мне нужно удалить все связанные записи при удалении действия в Table1.другими словами, когда пользователь выполняет действие удаления в Таблице 1, связанные записи из других связанных таблиц должны быть удалены автоматически, а не писать тонны запросов для достижения этой цели, или у нас есть потерянные записи без его основной записи.

что мне делать?Каковы лучшие практики?

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Руководство ? В частности, немного об ON UPDATE и ON DELETE.

Если вы хотите хранить свои таблицы в другом движке, чем innodb (который является единственным, поддерживающим ограничения FK), то оберните доступ к DML в процедуры (с разрешениями SECURITY DEFINER и убедитесь, что вы блокируете прямое UPDATE / DELETE привилегии для пользователя) или ассоциированные триггеры

1 голос
/ 17 июня 2011

То, что вы хотите, это выполнить каскадное удаление.Вот что вам нужно сделать:

  • Создать foreign keys между таблицами, используя ID пользователя в качестве ссылки
  • Внешний ключ должен быть определен как ON DELETE CASCADE

И все готово.

Обновление

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

...