【问题标题】:How do i create an INSERT trigger that based on a condition, either updates or inserts into another table?如何创建基于条件的 INSERT 触发器,更新或插入另一个表?
【发布时间】:2020-07-26 13:20:08
【问题描述】:

我正在尝试在 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)(autoincrement)、isbn、totalCopies、totalAvailable、totalCheckedOut。

【问题讨论】:

    标签: mysql database-trigger mysql-error-1064


    【解决方案1】:

    我假设此触发器的库存 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 ;
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2020-08-23
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 2021-02-26
      • 2022-01-15
      • 2021-10-15
      相关资源
      最近更新 更多