我一直在网上搜索如何在sqlite中使用“before trigger”。我知道使用“触发后”。我找到了一个说“触发前”用于在对数据库进行任何更改(表中的insert / updat行)之前进行验证的那个。为了清除表达式,我写了一个触发器,其中type是before,insert是insert以在插入之前验证标记。 我的触发器是
create trigger mark_insert before insert on exam
when mark<=50
begin
insert into exam(mark) values(50);
end;
也许这是错误的触发器。所以,你能指出我的错误吗? 我想检查标记是否小于或等于50.如果是,我想插入默认值(在这种情况下,50)。我对sql和触发器并不熟悉并开始学习。
我的考试表有以下栏目,
id(pk) | subject | mark
答案 0 :(得分:4)
如何在表格定义中确保它?
CREATE TABLE exam (
...
CHECK(mark<=50)
);
答案 1 :(得分:3)
如果您想对无效数据引发错误,请执行以下操作:
CREATE TRIGGER trigger_validate_mark BEFORE INSERT ON exam
WHEN mark<=50
BEGIN
SELECT RAISE(ABORT,'Mark must be at least 50.');
END;
如果您只想修复数据,请执行以下操作:
CREATE TRIGGER trigger_min_mark AFTER INSERT ON exam
WHEN mark<=50
BEGIN
UPDATE exam
SET mark=50
WHERE id = new.id;
END;
答案 2 :(得分:3)
如果你想检查标记是否小于或等于50
CREATE TRIGGER trigger_min_mark AFTER INSERT ON exam
WHEN New.mark<=50
BEGIN
UPDATE exam SET mark=50 WHERE id = New.id;
END
在您必须指定when
New.ColumnName
声明中小心