有没有办法使用约束或触发器来避免特定表上的行删除?

Pab*_*dez 9 sql database sql-server constraints

有没有办法避免使用约束在特定表上删除行?

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

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

谢谢!

编辑:

这个问题的整个想法不是触及应用程序.这不是安全问题,我只需要知道是否可以使用约束或SQL Server所具有的任何其他东西来执行我所要求的(它不需要是标准的数据库解决方案).

编辑2:

代码示例非常非常赞赏:D

Bil*_*win 10

至于在约束中强制执行此操作,我的解决方案是创建从属表,因此无法删除引用的行.

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);
Run Code Online (Sandbox Code Playgroud)

现在没有人可以删除Accountsid为0,1或2的行,除非他们先删除相应的行NoKillI.您可以使用SQL权限限制对依赖表的删除.


Red*_*ter 5

您可以通过编写针对相关表的DELETE触发的数据库触发器来执行此操作.如果ID无效,它需要做的就是抛出异常.