2012-01-03 42 views
0

我已經搜索過SO,但許多問題都與截斷表有關,但我不想清空這些表,我需要從全部刪除表,也許用一個查詢而不是多個查詢。由特定ID從所有表中刪除

到目前爲止,我在我的數據庫中有34個表,我需要刪除所有具有特定ID的行,當請求時。例如:

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

如何繼續使用可以執行此操作的查詢?另一種想法是,所有表格可能沒有與customer_id相同的行,因此即使沒有ID爲4的記錄,也應該刪除。

+0

是否所有的表都有'customer_id'列? – 2012-01-03 21:57:34

+0

爲什麼你需要這樣做? – Lion 2012-01-03 21:58:54

+0

因爲他們這樣做,我克隆了網站,他們提到了客戶ID,但我不能告訴你爲什麼,但他們都是出於某些原因。之所以我需要這樣做是因爲我控制了克隆網站,我有權禁用,刪除和編輯它們。所以當我刪除克隆的網站時,它應該刪除所有行到客戶的ID。 – MacMac 2012-01-03 22:01:26

回答

2

你找不到這個的原因是因爲你不應該真的需要它。我認爲沒有辦法做到這一點,因爲如果您正確使用foreign key constraints,通常情況下您不必這樣做。維護這種方法的正確方法是設置外鍵約束,以便從具有客戶標識的表(例如customer_purchase)指向custom_id爲主鍵的表;然後從customer_id爲主鍵的表中刪除一個客戶;所有涉及該客戶的其他表格也將被刪除。

從我剛剛提到的建築物;很多人選擇做一個「軟」刪除。這是您在客戶表上設置標誌的地方,然後在刪除時簡單地將其設置爲「1」。您可能想要這樣做的原因是出於審計能力的原因。比如說,你需要記錄所有的購買情況;即使客戶被刪除。在這個情況下;您應該進行軟刪除,以便在您的客戶被刪除時不會丟失購買記錄中的項目。

1

我不知道這是你可接受的解決方案,但您可以在

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