我有100多张桌子。用户表就是其中之一。与多个表相关的用户。如果我要删除一个用户,我需要检查其他表中是否存在任何用户表引用。所以我需要获取其他表中存在的外部关系的数量。用户附加将存储在另一个表中。所以参考数超过1,那么我不应该删除。
我在 PostgreSQL 工作。我认为在mysql中是可能的。我不了解 Postgresql,因为我是 PostgreSQL 新手。
提前致谢。
我有100多张桌子。用户表就是其中之一。与多个表相关的用户。如果我要删除一个用户,我需要检查其他表中是否存在任何用户表引用。所以我需要获取其他表中存在的外部关系的数量。用户附加将存储在另一个表中。所以参考数超过1,那么我不应该删除。
我在 PostgreSQL 工作。我认为在mysql中是可能的。我不了解 Postgresql,因为我是 PostgreSQL 新手。
提前致谢。
当您定义外键时,如果任何其他表仍保留键,您可以为其提供限制删除的选项。这是postgres 手册中的示例
CREATE TABLE order_items (
product_no integer REFERENCES products ON DELETE RESTRICT,
order_id integer REFERENCES orders ON DELETE CASCADE,
quantity integer,
PRIMARY KEY (product_no, order_id)
);
将每个删除begin exception
放在循环内的块中并使用错误条件 - restrict_violation
:
...
loop
begin
delete ... where id = 1;
exception
when restrict_violation then null
end;
end loop;
这样一个有外来关系的用户就不会被删除,其他人没有意愿。