在删除SQLite数据库中的行时出现错误。
可能是我在约束上犯了一个错误。需要帮助。
我的第一个表包含可以在其他表中使用的数字。
CREATE TABLE message_numbers (
number INTEGER PRIMARY KEY ASC
);
INSERT INTO message_numbers (number) VALUES (1), (10), (100);
第二张表有一个限制,只能使用第一张表中的数字。
CREATE TABLE messages_ger (
number INTEGER NOT NULL
UNIQUE,
message TEXT,
FOREIGN KEY (
number
)
REFERENCES message_numbers (number) ON DELETE NO ACTION
ON UPDATE NO ACTION
);
INSERT INTO messages_ger (number, message) VALUES (100, 'Test');
如果我尝试从表中删除一行,则会出现错误:
DELETE FROM messages_ger WHERE number=100;
[09:46:09]在数据库'myDB'上执行SQL查询时出错:没有这样的列:new.number
我做错了什么?
答案 0 :(得分:0)
我在做什么错了?
这表明您已经定义了 TRIGGER ,猜测是 ON DELETE 触发器,并且在 BEGIN中有一条语句 ... END 子句或 WHEN 子句试图在 new 时引用 new.number 只能在 ON INSERT 或 ON UPDATE 触发器中使用。按照:-
WHEN子句和触发操作都可以访问以下元素: 使用参考引用插入,删除或更新的行 格式为“ NEW.column-name”和“ OLD.column-name”,其中column-name为 触发器与之关联的表中列的名称。 新旧引用只能用于以下事件的触发器中: 它们相关,如下所示:
- 插入新引用有效
- 更新NEW和OLD参考是 有效
- 删除旧引用有效
如果提供了WHEN子句, 指定的SQL语句仅在WHEN子句为 真正。如果未提供WHEN子句,则执行SQL语句 每次触发器触发时。SQL As Understood By SQLite - CREATE TRIGGER
您可以使用以下方法确定存在哪些触发器:-
SELECT * FROM sqlite_master WHERE type = 'trigger';
您需要修改触发器(使用 old.number 而不是 new.number 删除并创建TRIGGER),或删除TRIGGER。