我的 sqlite3 数据库中有以下架构。
这是一个存储用户对产品出价的表格,以及用于从我的应用程序代码中卸载有效性检查的触发器。
此处的目标是检查新出价是否大于前一出价,如果不是,则向应用程序引发错误。它适用于INSERT
,但即使UPDATE
实际上是给定产品的最高出价,NEW.amount
也会引发错误。
我无法弄清楚为什么会发生这种情况主要是因为触发器无法调试。对此的建议也将不胜感激。
CREATE TABLE IF NOT EXISTS bids (
amount INTEGER NOT NULL,
product_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
submitted DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TRIGGER IF NOT EXISTS trig_beforeinsert BEFORE INSERT ON bids
BEGIN
SELECT CASE
WHEN
((SELECT MAX(amount) FROM bids WHERE product_id = NEW.product_id) >= NEW.amount)
THEN
RAISE (FAIL, "invalid amount")
END;
END;
CREATE TRIGGER IF NOT EXISTS trig_beforeupdate_amount BEFORE UPDATE OF amount ON bids
BEGIN
SELECT CASE
WHEN
((SELECT MAX(amount) FROM bids WHERE product_id = OLD.product_id) >= NEW.amount)
THEN
RAISE (FAIL, "invalid amount")
END;
END;
答案 0 :(得分:0)
实际上这是一个特定于应用程序的错误,我可以在发布之前找到它。