2

我是数据库方面的初学者,并且一直在阅读 SQLite3 文档。但是,我找不到以下问题的答案:

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

谢谢!

4

4 回答 4

11

您可以创建触发器以防止更新特定列:

CREATE TRIGGER ro_columns
BEFORE UPDATE OF col1, col2 ON mytable
BEGIN
    SELECT raise(abort, 'don''t do this!');
END
于 2012-10-16T10:07:46.113 回答
2

遗憾的是,在 SQLite 中创建表后无法添加约束;

无法重命名列、删除列或在表中添加或删除约束。

换句话说,不,您不能使用约束将列设置为只读,因为使用 ( CHECK) 约束创建表将首先无法将只读值添加到表中。

于 2012-10-16T09:58:55.833 回答
1

另一种方法是重命名表并在其位置创建一个视图。然后,您可以INSTEAD OF改为使用触发器来更新表。

http://www.sqlite.org/lang_createtrigger.html

于 2012-10-16T10:17:17.417 回答
0

这是一个带有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;
于 2020-09-11T23:00:32.280 回答