2012-09-12 64 views
0

我有一個mysql數據庫,並在一個table我有f_idP_Keyf_id在多個table引用爲f_key。我想要刪除所有table中這個f_id(比如說10)的記錄。那麼爲此我需要delete所有table哪些有f_id = 10作爲f_key那麼只有我可以delete這從主table其中包含它作爲P_Key。可以有任何自動過程,它可以delete這個通過自動查看table,我不想在查詢中記下整個列表中的table(因爲該列表非常大,超過18個表格),因爲此p_key被引用很多tablesMYSQL:刪除所有表中的記錄單杆

回答

1

最簡單的方法是在您的密鑰上設置一個ON DELETE CASCADE CONSTRAINT,這樣在刪除父表上的記錄時將刪除引用該行的其他表中的所有子記錄。請注意,如果它們沒有ON DELETE CASCADE約束,則需要刪除外鍵並再次添加它們。這樣的事情:

SHOW CREATE TABLE [table_name] 

ALTER TABLE [table_name] DROP FOREIGN KEY [f_id]; 

ALTER TABLE [table_name] 
ADD CONSTRAINT [f_id] 
FOREIGN KEY (`[f_id]`) REFERENCES `[other_table]` (`[column_name]`) 
ON DELETE CASCADE; 
+0

爲此,我在所有的桌子上都做了這個,但是意外地還剩下兩張桌子,加了CASCADE,我做了很多..THNK很多.. –

0

您應該能夠查看information_schema表以找出您的表的名稱。喜歡的東西:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = "database_name" 

與要檢查數據庫的名稱替換database_name,它應該返回所有的表名。您可能可以使用該列表做些事情。

+0

是的,但它也會給我所有的表名,但我仍然需要查找表中的f_id檢查,然後只有我可以框架查詢,但我想要的是那個數據庫應該代表我在這個f_id出現的地方查看,然後刪除。 –