Синтаксическая ошибка триггера MySQL в БД Мария

0

Я пытался сделать один триггер, так что я могу проверить, нет ли какой-либо отрицательной установки возраста. Я попробовал выполнить запрос ниже, но его ошибка ниже.

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

Я что-то делаю неправильно в синтаксисе?

Теги:
triggers
mysql-error-1064

1 ответ

0

Заявление, которое у вас есть в вашем триггере, не является выражением. Это просто выражение. Это не то, что вы можете использовать как выражение самостоятельно.

Я просто догадываюсь о том, что вы пытаетесь сделать: убедитесь, что 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

Нет никакого конкретного преимущества для этой альтернативы, я просто показываю другое использование выражения.

  • 0
    позвольте мне попробовать ваш код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню