首页 > 解决方案 > 架构错误:错误:SQLITE_ERROR:添加触发器以检查返回时输入不完整(如果日期在未来)

问题描述

这是我当前创建数据库的 sqllite 代码:

CREATE TABLE users(
    user_id INT,
    channel_id INT NOT NULL UNIQUE,
    PRIMARY KEY (user_id)
);

CREATE TABLE credits(
    user_id INT,
    number_of_items INT CHECK(number_of_items > 0),
    expiration DATETIME,
    PRIMARY KEY (user_id, number_of_items, expiration),
    FOREIGN KEY (user_id) REFERENCES users (user_id)
);

CREATE TABLE users_items(
    user_id INT,
    item_id INT,
    PRIMARY KEY (user_id, item_id),
    FOREIGN KEY (user_id) REFERENCES users (user_id)
);

这是我试图制作的触发器的代码

CREATE TRIGGER check_has_enough_credits_to_monitor_item
BEFORE INSERT ON users_items
BEGIN
   SELECT
     CASE
       WHEN (SELECT COUNT(*) FROM users_items WHERE user_id = NEW.user_id) >=
            (SELECT sum(number_of_items) FROM credits WHERE user_id = NEW.user_id AND expiration >= datetime('now'))
         THEN RAISE (ABORT, 'No more items allowed')
     END;
END;

在我的数据库中,每个用户都有存储在credits表中的信用。这些信用允许一定数量的项目users_items,但这些信用也有与之相关的到期。我想生成一个触发器,user_items如果​​用户没有足够的信用(尚未过期),将阻止用户添加记录,但我的小提琴出现以下错误:

Schema Error: Error: SQLITE_ERROR: incomplete input
Schema Error: Error: SQLITE_ERROR: cannot commit - no transaction is active

标签: sqlite

解决方案


推荐阅读