Удалить из всех таблиц по определенному идентификатору - PullRequest
0 голосов
/ 04 января 2012

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

Пока у меня есть 34 таблицы в моей базе данных, мне нужно удалить все строки, которые имеют определенный идентификатор при запросе.Например:

DELETE FROM table1, table2 ... table33, table34
WHERE customer_id = 4

Как мне выполнить запрос, который может это сделать?С другой стороны, во всех таблицах могут отсутствовать строки, совпадающие с customer_id, поэтому следует удалять, даже если нет записей с идентификатором 4.

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Причина, по которой вы не можете найти это, состоит в том, что вам это не нужно. Я не думаю, что есть способ сделать это, потому что обычно вам не нужно, если вы правильно используете ограничения внешнего ключа . Правильный способ сохранить это - настроить ограничения внешнего ключа так, чтобы они указывали на таблицы, в которых есть ваш идентификатор клиента (ex customer_purchase), на таблицу, где custom_id - первичный ключ; и затем, когда вы удаляете клиента из таблицы, где customer_id является первичным ключом; все остальные таблицы, относящиеся к этому клиенту, также будут удалены.

Построение из того, что я только что упомянул; многие люди выбирают «мягкое» удаление. Здесь вы просто устанавливаете флаг на таблице клиентов, а затем просто устанавливаете его в «1», когда он удаляется. Причина, по которой вы, возможно, захотите это сделать, заключается в возможностях аудита. Скажем, например, вам нужно вести учет всех покупок; даже когда клиент удален. В этой ситуации; Вы должны делать мягкие удаления, чтобы не терять элементы из истории покупок при удалении вашего клиента.

1 голос
/ 04 января 2012

Я не знаю, является ли это приемлемым решением для вас, но вы можете

DELETE t1, t2, ... FROM table1 t1, table2 t2, ...
WHERE t1.customer_id = 4 AND t2.customer_id = 4 AND ...
...