簡體   English   中英

如何創建基於條件的 INSERT 觸發器,更新或插入另一個表?

[英]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)(autoincrement)、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 ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM