对于数据库而言,我是初学者,并且已经阅读了SQLite3文档。但是,我找不到以下答案:
是否可以创建一个具有一些只读字段的SQLite3数据库表(即不是整个表都是只读的)?我知道我可以阻止人们通过一些额外的代码写入字段,但我想知道是否可以定义约束或类似的东西。
谢谢!
答案 0 :(得分:5)
您可以创建trigger以阻止更新特定列:
CREATE TRIGGER ro_columns
BEFORE UPDATE OF col1, col2 ON mytable
BEGIN
SELECT raise(abort, 'don''t do this!');
END
答案 1 :(得分:2)
可悲的是,约束cannot be added after table creation in SQLite;
无法重命名列,删除列或添加或 从表中删除约束。
换句话说,不,你不能只使用约束来读取列,因为使用(CHECK
)约束创建表将使得无法在第一个表中向表中添加只读值的地方。
答案 2 :(得分:1)
另一种方法是重命名表并在其位置创建视图。然后,您可以使用INSTEAD OF
触发器来更新表格。
答案 3 :(得分:0)
这是一个示例表,带有一个readonly
字段,当该字段设置为非零时,该行变为只读。
CREATE TABLE test (data TEXT, readonly INTEGER);
这是当data
非零时禁止更新readonly
的触发器:
CREATE TRIGGER test_ro BEFORE UPDATE OF data ON test WHEN OLD.readonly != 0
BEGIN
SELECT raise(fail, "Read-only data");
END;