如何在sqlite中插入触发器之前进行验证

时间:2011-11-17 20:04:10

标签: sqlite triggers

我一直在网上搜索如何在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

3 个答案:

答案 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声明中小心