在 sqlite 数据库或 sqlitebrowser 中,在 linux 中,如何使列写保护?
in sqlite database or sqlitebrowser, in linux, how make a column write protected?
在 sqlite 数据库或 sqlitebrowser 中,在 linux 中,如何使列写保护?
我正在打开 sqlite 浏览器。
我创建了一个 table。
然后,一些专栏。
例如。 A列必须写保护。但不存在这样的“选项”,因为存在“唯一键”选项或“非空”选项。
因此,我可以添加一些代码,使其不插入其他条目,也不修改此列。
我该怎么做?
在SQLite中没有像write-protected这样定义列的东西。
在 table 中插入所需的所有行后,您可以创建一个不允许再插入的触发器和另一个不允许更新特定列的触发器:
CREATE TRIGGER no_more_rows BEFORE INSERT ON tablename
BEGIN
SELECT RAISE(ABORT, 'No more rows allowed');
END;
CREATE TRIGGER no_updates BEFORE UPDATE ON tablename
BEGIN
SELECT
CASE
WHEN NEW.col IS NOT old.col THEN RAISE(ABORT, 'Update of col is not allowed')
END;
END;
将tablename
和col
改成你table和专栏的名字。
参见demo。
在 sqlite 数据库或 sqlitebrowser 中,在 linux 中,如何使列写保护?
我正在打开 sqlite 浏览器。 我创建了一个 table。 然后,一些专栏。 例如。 A列必须写保护。但不存在这样的“选项”,因为存在“唯一键”选项或“非空”选项。
因此,我可以添加一些代码,使其不插入其他条目,也不修改此列。
我该怎么做?
在SQLite中没有像write-protected这样定义列的东西。
在 table 中插入所需的所有行后,您可以创建一个不允许再插入的触发器和另一个不允许更新特定列的触发器:
CREATE TRIGGER no_more_rows BEFORE INSERT ON tablename
BEGIN
SELECT RAISE(ABORT, 'No more rows allowed');
END;
CREATE TRIGGER no_updates BEFORE UPDATE ON tablename
BEGIN
SELECT
CASE
WHEN NEW.col IS NOT old.col THEN RAISE(ABORT, 'Update of col is not allowed')
END;
END;
将tablename
和col
改成你table和专栏的名字。
参见demo。