我是数据库方面的初学者,并且一直在阅读 SQLite3 文档。但是,我找不到以下问题的答案:
是否可以创建具有一些只读字段的 SQLite3 数据库表(即不是整个表都是只读的)?我知道我可以通过一些额外的代码阻止人们写入字段,但我想知道是否可以定义约束或类似的东西。
谢谢!
我是数据库方面的初学者,并且一直在阅读 SQLite3 文档。但是,我找不到以下问题的答案:
是否可以创建具有一些只读字段的 SQLite3 数据库表(即不是整个表都是只读的)?我知道我可以通过一些额外的代码阻止人们写入字段,但我想知道是否可以定义约束或类似的东西。
谢谢!
您可以创建触发器以防止更新特定列:
CREATE TRIGGER ro_columns
BEFORE UPDATE OF col1, col2 ON mytable
BEGIN
SELECT raise(abort, 'don''t do this!');
END
遗憾的是,在 SQLite 中创建表后无法添加约束;
无法重命名列、删除列或在表中添加或删除约束。
换句话说,不,您不能使用约束将列设置为只读,因为使用 ( CHECK
) 约束创建表将首先无法将只读值添加到表中。
另一种方法是重命名表并在其位置创建一个视图。然后,您可以INSTEAD OF
改为使用触发器来更新表。
这是一个带有readonly
字段的示例表,当设置为非零时,该行变为只读。
CREATE TABLE test (data TEXT, readonly INTEGER);
这是禁止 UPDATEdata
何时readonly
为非零的触发器:
CREATE TRIGGER test_ro BEFORE UPDATE OF data ON test WHEN OLD.readonly != 0
BEGIN
SELECT raise(fail, "Read-only data");
END;