Триггер перед вставкой не работает

0

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

CREATE TABLE 'seance' (
'idSeance' int(11) NOT NULL,
'Date/time' datetime NOT NULL,
'Hall_idHall' int(45) DEFAULT NULL,
'Hall_Theatre_idTheatre' int(45) DEFAULT NULL,
'Performance_idPerformance' int(45) NOT NULL,
'price' int(100) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  CREATE TRIGGER 'insert_seance' BEFORE INSERT ON 'seance'
    FOR EACH ROW BEGIN
      IF (NEW.'Date/time' >= CURRENT_TIMESTAMP)
      THEN
        INSERT INTO seance
          ('idSeance', 'Date/time', 'Hall_idHall', 
             'Hall_Theatre_idTheatre','Performance_idPerformance', 'price') 
               VALUES (NEW.'idSeance',NEW.'Date/time',NEW.'Hall_idHall',        
  NEW.'Hall_Theatre_idTheatre',NEW.'Performance_idPerformance',NEW.'price');
                ELSE
                SIGNAL SQLSTATE '45000'
                SET MESSAGE_TEXT = 'Error for updating values';

      END IF;
 END

Я не понимаю, почему это дает ошибку?

1442 - Невозможно обновить таблицу "сеанс" в хранимой функции/триггере, поскольку она уже используется оператором, который вызывал эту хранимую функцию/триггер.

Теги:
database

1 ответ

0
Лучший ответ

Это одно из немногих сообщений об ошибках mysql, которые кристально чисты (IMHO). Однако - вам не нужен этот оператор INSERT. Просто введите ошибку, если данные недействительны. Если данные действительны, вам не нужно ничего делать в триггере. Строка будет только что вставлена.

CREATE TRIGGER 'insert_seance' BEFORE INSERT ON 'seance' FOR EACH ROW
BEGIN
    IF (NEW.'Date/time' < CURRENT_TIMESTAMP)
        THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Error for updating values';
    END IF;
END
  • 0
    спасибо это правда

Ещё вопросы

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