MySQL ОШИБКА: невозможно обновить триггер таблицы SQL - PullRequest
0 голосов
/ 22 марта 2020

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

Проблема в том, что я получаю ошибку при попытке вставить в appuntamento (таблица встреч). Это ошибка, которую я получаю

Error Code: 1442. Can't update table 'prenotazione' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.  0.000 sec

Таблица назначений:

CREATE TABLE `appuntamento` (
  `idAppuntamento` int NOT NULL AUTO_INCREMENT,
  `Prenotazione` int NOT NULL,
  `Servizio` int NOT NULL,
  `Impiegato` int NOT NULL,
  PRIMARY KEY (`idAppuntamento`),
  KEY `Servizio_idx` (`Servizio`),
  KEY `Impiegato_idx` (`Impiegato`),
  KEY `prenotaz_1` (`Prenotazione`),
  CONSTRAINT `impiegato_1` FOREIGN KEY (`Impiegato`) REFERENCES `impiegato` (`idImpiegato`),
  CONSTRAINT `prenotaz_1` FOREIGN KEY (`Prenotazione`) REFERENCES `prenotazione` (`idPrenotazione`),
  CONSTRAINT `servizio_1` FOREIGN KEY (`Servizio`) REFERENCES `servizio` (`idServizio`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

Таблица служб:

`CREATE TABLE `servizio` (
  `idServizio` int NOT NULL AUTO_INCREMENT,
  `TipoServizio` varchar(45) NOT NULL,
  `Descrizione` varchar(200) DEFAULT NULL,
  `Durata` int NOT NULL,
  `Prezzo` decimal(5,2) DEFAULT NULL,
  PRIMARY KEY (`idServizio`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8``

Таблица резервирования:

CREATE TABLE `prenotazione` (
  `idPrenotazione` int NOT NULL AUTO_INCREMENT,
  `Cliente` int NOT NULL,
  `Data` date NOT NULL,
  `OraInizio` time NOT NULL,
  `OraFine` time NOT NULL DEFAULT '00:00:00',
  `CostoTotale` decimal(3,2) NOT NULL DEFAULT '0.00',
  PRIMARY KEY (`idPrenotazione`),
  KEY `Cliente_idx` (`Cliente`),
  CONSTRAINT `cliente_1` FOREIGN KEY (`Cliente`) REFERENCES `cliente` (`idCliente`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8

Триггер:

DELIMITER $$
CREATE TRIGGER update_hour 
AFTER INSERT ON appuntamento 
FOR EACH ROW 
BEGIN
    DECLARE durata int;
    SELECT Durata INTO @durata
    FROM servizio
    WHERE NEW.Servizio = idServizio;

    UPDATE prenotazione
    SET OraFine = OraInizio + @durata
    WHERE NEW.Prenotazione = prenotazione.idPrenotazione;
END;
$$
DELIMITER ;

Это вставка в Appuntamento (возможно, это проблема):

INSERT INTO Appuntamento( Prenotazione, Servizio, Impiegato) VALUES
((SELECT idPrenotazione from prenotazione WHERE idPrenotazione = '11'), 
(SELECT idServizio from servizio WHERE TipoServizio='Acconciatura Uomo'),
(SELECT idImpiegato from impiegato WHERE idImpiegato='2')); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...