MySQL остановка события в триггерах - PullRequest
0 голосов
/ 20 февраля 2011

Как остановить Event в триггере.Например: у меня есть этот простой код ниже:

CREATE TRIGGER checkPlayer BEFORE INSERT ON players

BEGIN

  DECLARE ctr INT;

  SELECT count(*) 
    INTO ctr 
    FROM players 
   WHERE fName = NEW.fName 
     AND lName = NEW.lName;

  IF ctr > 0 THEN
    -- LEAVE and don't insert because player exists
  END IF;

END

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

У меня есть мини-пост в блоге, объясняющий сигналы с примером кода.Нажмите здесь .Кроме того, вместо генерации исключения путем вставки двух записей с одним и тем же первичным ключом, вы также можете использовать исключение деления на 0, которое не содержит операторов вставки в базе данных.

1 голос
/ 20 февраля 2011

MySQL использует SIGNAL для таких вещей:

SIGNAL - это способ «вернуть» ошибку.SIGNAL предоставляет информацию об ошибке обработчику, внешней части приложения или клиенту.Кроме того, он обеспечивает контроль характеристик ошибки (номер ошибки, значение SQLSTATE, сообщение).Без SIGNAL необходимо прибегнуть к обходным путям, таким как преднамеренное обращение к несуществующей таблице, чтобы подпрограмма вернула ошибку.

Любая Условная ошибка в триггере BEFORE (включая, AFAIK, соответствующее значение SIGNAL) прервет триггер и оператор, который активировал триггер.Если ваша версия MySQL не поддерживает SIGNAL (т. Е. Ваша версия меньше 5.5), вам придется вызвать ошибку другим способом, например, старый хак «выбрать из таблицы, который не существует» или "нарушить ПК двойной вставкой" взломать.

У меня есть только 5,1 под рукой, поэтому я не могу проверить SIGNAL материал.Соответствующий раздел «19.3.1. Синтаксис триггера» такой же для 5.1, 5.2 и 5.5, хотя один из кластеров «инициировать ошибку» должен работать, если вам нужно прибегнуть к таким вещам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...