Sql 如何对h2中的特定id禁用表上的删除?

Sql 如何对h2中的特定id禁用表上的删除?,sql,h2,Sql,H2,假设h2中有student表,每个student都有id(主键)。如果id==100,是否可以实现触发器(或其他机制)来禁用删除操作。我希望在DB级别上有这样的保护,但不希望在应用程序级别上有这样的保护。一种解决方案显然是防止删除或更改值的触发器 另一种方法是使用外键约束。创建要保留并使用外键引用的ID表: create table keep_these_students ( student_id int, constraint fk_keep_these_students_st

假设h2中有
student
表,每个student都有id(主键)。如果id==100,是否可以实现触发器(或其他机制)来禁用删除操作。我希望在DB级别上有这样的保护,但不希望在应用程序级别上有这样的保护。

一种解决方案显然是防止删除或更改值的触发器

另一种方法是使用外键约束。创建要保留并使用外键引用的ID表:

create table keep_these_students (
    student_id int,
    constraint fk_keep_these_students_student_id foreign key (student_id) references students(id)
);

insert into keep_these_students (student_id)
    values (100);

如果id更改,外键定义将要求不能删除该行。而且,添加额外的ID也很容易,而无需更改触发器。

一种解决方案显然是一种防止删除或更改值的触发器

另一种方法是使用外键约束。创建要保留并使用外键引用的ID表:

create table keep_these_students (
    student_id int,
    constraint fk_keep_these_students_student_id foreign key (student_id) references students(id)
);

insert into keep_these_students (student_id)
    values (100);

如果id更改,外键定义将要求不能删除该行。而且,添加额外的ID很容易,无需更改触发器。

这是一个可爱的技巧,比触发器更容易维护。这是一个可爱的技巧,比触发器更容易维护。