Я пытаюсь реализовать триггер после вставки в таблицу, чтобы обновить значение в другой таблице. По сути, мне нужно обновлять время каждый раз, когда добавляется встреча.
Проблема в том, что я получаю ошибку при попытке вставить в 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'));