mysql - MySQL 错误:无法更新表 SQL 触发器
问题描述
我试图在插入表后实现触发器,以便更新另一个表上的值。基本上,每次添加约会时我都需要更新时间。
问题是当我尝试在 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'));
解决方案
推荐阅读
- android - 如何在锁定屏幕上显示 android 推送通知?
- php - 如何输出关联数组的字符串列表?
- python-2.7 - Python PyMC3 中的 pm.Normal()
- odbc - SQLSetPos 中的游标状态无效
- angular - 如何将 dx-data-grid 的所有 dxi-column 移动到单独的组件?
- outlook - 从 Mac Outlook 更新 16.13.1 开始,加载项支持中断
- swift - 将多行的 heightForRowAt indexPath 设置为 0
- java - How to access static file from webapp folder in spring controller?
- c# - 将资产下载到统一游戏中
- c++ - 返回函数中创建的对象。mingw和cl的区别