Как проверить с перед вставкой триггера в sqlite - PullRequest
6 голосов
/ 18 ноября 2011

Я искал в Интернете, как использовать "перед триггером" в sqlite.Я правильно знаю об использовании "после триггера".Я нашел тот, который сказал, что «перед триггером» использовался для проверки перед любыми изменениями в базе данных (строка вставки / обновления в таблице).Чтобы очистить выражение, я написал триггер с типом перед и событием вставки для проверки метки перед вставкой.Мой триггер

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 ]

4 голосов
/ 12 августа 2015

Как насчет обеспечения этого в определении таблицы?

CREATE TABLE exam (
  ...
  CHECK(mark<=50)
);
3 голосов
/ 18 марта 2014

, если вы хотите проверить отметку, меньше или равна 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

3 голосов
/ 18 ноября 2011

Если вы хотите выдать ошибку на недействительных данных, сделайте это:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...