Я пытался сделать один триггер, так что я могу проверить, нет ли какой-либо отрицательной установки возраста. Я попробовал выполнить запрос ниже, но его ошибка ниже.
CREATE TRIGGER agecheck
BEFORE INSERT ON people
FOR EACH ROW
BEGIN
(CASE WHEN people.age > 0 THEN people.age ELSE 0 END )
END
КОД ОШИБКИ:
# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с 'CASE WHEN people.age> 0 THEN 1 ELSE 0 END) END' в строке 5
Я что-то делаю неправильно в синтаксисе?
Заявление, которое у вас есть в вашем триггере, не является выражением. Это просто выражение. Это не то, что вы можете использовать как выражение самостоятельно.
Я просто догадываюсь о том, что вы пытаетесь сделать: убедитесь, что age
не отрицательный. Возможно, вы можете сделать это, объявив столбец как TINYINT UNSIGNED
, но если вы хотите сделать это с помощью триггера:
FOR EACH ROW
BEGIN
SET NEW.age = CASE WHEN NEW.age > 0 THEN NEW.age ELSE 0 END;
END
В триггере всегда NEW.<columnname>
на столбцы соответствующей запущенной строки с NEW.<columnname>
или OLD.<columnname>
.
Другое выражение, которое работает так же хорошо:
FOR EACH ROW
BEGIN
SET NEW.age = GREATEST(NEW.age, 0);
END
Нет никакого конкретного преимущества для этой альтернативы, я просто показываю другое использование выражения.