2011-11-26 108 views
3

我有一個按鈕來刪除一個客戶。如果客戶被刪除,則只能從客戶表中刪除。但是我有客戶在付款(所有付款記錄被添加)和評論(所有用戶評論被添加)等表格中的記錄。如何刪除表中的一行時刪除所有相關的表記錄?

我在所有表中都有客戶ID作爲外鍵。但其字段名稱不同。例如在customer_details表中,我有名稱爲id的客戶id,以及其他表中的lead_id。

我應該寫什麼樣的查詢以從所有三個(客戶,評論,付款)表中刪除客戶的記錄?

回答

9

你應該使用外鍵

的級聯特性例如

FOREIGN KEY (customer_id) REFERENCES customer(id) 
         ON DELETE CASCADE 
+0

+1你爲每個表做到這一點,對不對? –

+0

有沒有辦法在mysql中查詢「系統」模式,並使用它查找哪些密鑰cascasdes鏈接到基礎的基表。基本上使用必須存在於所有級聯的系統信息的「逆向工程」?我曾經用Oracle做過這樣的事情。 –

+0

@Michael Durrant,我的想法與你在這裏的評論以及你對我的評論大致相同。在這裏你去:http://stackoverflow.com/questions/806989/mysql-how-to-i-find-all-tables-that-have-foreign-keys-that-reference-particular – abelito

0

這將是更好地刪除其他表中第一,然後在最後一個從客戶表中刪除。但是你可以從所有的表一次刪除,使用的查詢是這樣的:

 
DELETE 
    FROM tbl_name1 , tbl_name2 ... 
    USING table_references 
    [WHERE where_condition] 

希望它可以幫助