2012-01-03 4 views
0

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

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

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

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

+0

ли все таблицы имеют 'столбец customer_id'? –

+0

Зачем вам это нужно? – Lion

+0

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

ответ

2

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

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

1

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

DELETE t1, t2, ... FROM table1 t1, table2 t2, ... 
WHERE t1.customer_id = 4 AND t2.customer_id = 4 AND ... 
Смежные вопросы