我如何创建一个基于条件的 INSERT 触发器,更新或插入另一个 table?

How do i create an INSERT trigger that based on a condition, either updates or inserts into another table?

我正在尝试在 phpmyadmin 中创建一个触发器,我有 2 个表,Items 和 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 值, 否则插入会出错。

更新查询可以稍微简化

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指出减少inner Part也是可以的。当您将 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 ;