SQLite3数据库表中的只读字段?

时间:2012-10-16 09:52:10

标签: database sqlite constraints

对于数据库而言,我是初学者,并且已经阅读了SQLite3文档。但是,我找不到以下答案:

是否可以创建一个具有一些只读字段的SQLite3数据库表(即不是整个表都是只读的)?我知道我可以阻止人们通过一些额外的代码写入字段,但我想知道是否可以定义约束或类似的东西。

谢谢!

4 个答案:

答案 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触发器来更新表格。

请参阅http://www.sqlite.org/lang_createtrigger.html

答案 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;