小编典典

有没有一种方法可以避免使用约束或触发器删除特定表上的行?

sql

有没有一种方法可以避免使用约束在特定表上删除行?

我想(例如)拒绝删除行,如果id为0,1或2

这是为了避免用户删除应用程序的主帐户,即使有人直接(使用错误)尝试使用sql,我也希望避免使用该帐户。

谢谢!

编辑:

这个问题的整体思想是不碰应用程序。这不是安全问题,我只需要知道是否可以用约束或SQL
Server拥有的其他任何方式来执行我所要求的操作(不需要成为标准的db解决方案)。

编辑2:

代码示例非常非常感谢:D


阅读 143

收藏
2021-04-22

共1个答案

小编典典

至于在 约束中 强制执行此操作,我的解决方案是创建一个依赖表,因此不能删除引用的行。

CREATE TABLE NoKillI (
  id INT NOT NULL, FOREIGN KEY (id) REFERENCES Accounts(id) ON DELETE RESTRICT
);
INSERT INTO NoKillI (id) VALUES (0);
INSERT INTO NoKillI (id) VALUES (1);
INSERT INTO NoKillI (id) VALUES (2);

现在,没有人可以删除AccountsID值为0、1或2的行,除非他们首先删除中的对应行NoKillI。您可以使用SQL特权来限制从属表的删除。

2021-04-22