我正在尝试在phpmyadmin中创建触发器,并且我有2个表,即Item和Inventory。这是针对图书馆数据库的。当我插入一个新项目时,如果项目isbn已存在于库存中,我想将其添加到库存中该项目的totalCopies中。如果不是,我希望它在库存中插入一个新行,其中包含新的项目isbn。这是我第一次使用触发器,并且出现语法错误。这就是我现在所拥有的。
BEGIN
IF ((SELECT COUNT(*) FROM inventory WHERE inventory.isbn = NEW.isbn) > 0) THEN
(
UPDATE inventory
SET inventory.totalCopies = inventory.totalCopies + 1
WHERE inventory.isbn = NEW.isbn
SET inventory.totalAvailable = inventory.totalAvailable + 1
WHERE inventory.isbn = NEW.isbn
)
ELSE
INSERT INTO inventory VALUES( , NEW.isbn, 1, 1, 0)
END
库存列是:inventoryID(PrimaryKey)(自动增量),isbn,totalCopies,totalAvailable,totalCheckedOut。
我为此触发器假定库存ID是一个auto_increment值,否则插入会出现错误。
UPDATE查询可能有点简化
DELIMITER $$
CREATE TRIGGER insorup
AFTER INSERT
ON ORDERS FOR EACH ROW
BEGIN
IF (EXISTS(SELECT 1 FROM inventory WHERE inventory.isbn = NEW.isbn) ) THEN
UPDATE inventory
SET inventory.totalCopies = inventory.totalCopies + 1 ,
inventory.totalAvailable = inventory.totalAvailable + 1
WHERE inventory.isbn = NEW.isbn;
ELSE
INSERT INTO inventory VALUES ( NEW.isbn, 1, 1, 0);
END IF;
END$$
DELIMITER ;
正如您在评论中看到的,Shadow指出,也有可能缩小内部部分。当您将列ISBN声明为UNIQUE
DELIMITER $$
CREATE TRIGGER insorup
AFTER INSERT
ON ORDERS FOR EACH ROW
BEGIN
INSERT INTO
inventory VALUES ( NEW.isbn, 1, 1, 0)
ON DUPLICATE KEY UPDATE inventory.totalCopies = inventory.totalCopies + 1 ,
inventory.totalAvailable = inventory.totalAvailable + 1;
END$$
DELIMITER ;