[英]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.