Тема: MySQL вихід з тригера (SQLite raise)
Є таблиця СКЛАД:
CREATE TABLE `storehouse` (
`idTool` int(10) unsigned NOT NULL AUTO_INCREMENT,
`nameTool` varchar(100) NOT NULL,
`countTool` int(3) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`idTool`),
UNIQUE KEY `nameTool_UNIQUE` (`nameTool`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
Є таблиця ВИДАНИХ ІНСТРУМЕНТІВ
CREATE TABLE `staffTools` (
`idStaffTools` int(10) unsigned NOT NULL AUTO_INCREMENT,
`boardNumber` char(4) NOT NULL,
`idTool` int(10) unsigned NOT NULL,
`stratDate` date DEFAULT NULL,
`endDate` date DEFAULT NULL,
PRIMARY KEY (`idStaffTools`),
KEY `boardNumberFK` (`boardNumber`),
KEY `idToolFK` (`idTool`),
CONSTRAINT `idToolFK` FOREIGN KEY (`idTool`) REFERENCES `storehouse` (`idTool`) ON UPDATE CASCADE,
CONSTRAINT `boardNumberFK` FOREIGN KEY (`boardNumber`) REFERENCES `staff` (`boardNumber`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Коли ВИДАЄТЬСЯ ІНСТРУМЕНТ ПРАЦІВНИКУ, тобто додається запис в таблицю ВИДАНІ ІНСТРУМЕНТИ, вішаю на таблицю тригери. BEFORE щоб тригер перевіряв чи є даний товар на складі AFTER щоб тригер відмінусовував товар на складі.
І ось з перевіркою товару виникає проблема, якщо товару не має на складі, як вийти з тригера не додавши в таблицю ВИДАНИХ ІНСТРУМЕНТІВ запис? Наприклад в SQLite, можна легко вирішити дану задачу, скориставшись RAISE(ABORT, "Не має даного товару"). Читав про SIGNAL, але в мене MySQL 5.4. Все, що знайшов, це створення помилки в тригері власноруч:
DELIMITER $$
CREATE TRIGGER beforeAddTool BEFORE INSERT ON staffTool FOR EACH ROW
BEGIN
IF (SELECT countTool FROM storehouse WHERE idTool = NEW.idTool) < 1 THEN
UPDATE `Даного товару не має на складі` SET x=1;
END IF;
END$$
DELIMITER ;
Але, щось мені такий варіант не дуже подобається. Підкажіть будь-ласка, як краще вирішити дану задачу?