2012-09-12 37 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出现的地方查看,然后删除。 –