0

假设您有一个表(A),其中包含有限数量的数据,并且作为主键的字段之一被其他表中的许多外键而不是一个外键引用。

这些表的外键对前面提到的 table(A) 有约束,如果 table(A) 中的一行被删除并且其他表 FK 之一持有对它的引用,删除将失败。

好的,数据库设计已经完成,现在是软件的问题,在这种情况下是 PHP。试图从 table(A) 中删除一行,如果持有引用,应该如何检查以确保该行不能被删除?

我见过事先检查每个表的情况,但是这涉及在每次检查中进行编码,这成为维护的噩梦。此外,我不能简单地尝试删除,因为这需要是一个跨数据库应用程序,因此返回的错误代码不会是一致的。

我很想知道人们通常如何处理这种情况。我提到我正在使用 PHP,但这种情况应该适用于任何语言。

4

1 回答 1

1

通常,您可以通过尝试在 PRIMARY KEY 表上执行 DELETE 语句、捕获异常并在事务发生时回滚来处理此问题。然后,您可以以您想要的任何形式向用户报告故障。如果所有引用表确实将 FOREIGN KEY 声明回 PRIMARY KEY 表,则此方法有效。

如果你真的需要先检查,你需要编写代码来“内省”数据库中存在的键,提取每个引用外键的表和列名,并对每个表发出 SELECT COUNTs。不幸的是,每个数据库引擎都有自己的方法来了解数据库结构,因此您必须为要支持的每个数据库引擎编写一些代码。

于 2012-10-31T02:19:58.527 回答