0

我有一个mysql数据库,其中一个table我有f_id as P_Key,这f_id在多个tableas中被引用f_key。我想一次性删除所有记录f_id(比如说 10 个)table。然后为此我需要delete在所有table具有f_id= 10 的内容中,因为f_key只有我才能从包含它delete的 main中获取它。是否有任何自动化过程可以通过自动查看来实现,我不想在查询中写下整个列表(因为列表非常大,超过 18 个表),因为这在许多.tableP_Keydeletetabletablep_keytables

4

2 回答 2

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;
于 2012-09-12T10:52:56.270 回答
0

您应该能够查看information_schema表格以找出表格的名称。就像是:

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

替换database_name为您要检查的数据库的名称,它应该返回所有表名。你也许可以用那个列表做点什么。

于 2012-09-12T10:51:52.637 回答