动态设置默认SQLite3字段

时间:2015-11-11 20:06:52

标签: sqlite command

我有一个我想要创建的SQLite3数据库。我希望INTEGER字段(名为“Length”)的DEFAULT值等于另一个字段中字符串的长度(名为“Pattern”)。

CREATE TABLE knowledge (
    Entry INTEGER   PRIMARY KEY   AUTOINCREMENT,
    Priority TINYINT UNSIGNED   CHECK (0 <= Priority < 15),
    Pattern TEXT   NOT NULL,
    Length INTEGER UNSIGNED   DEFAULT 'LENGTH(Pattern);'
);

但是,当前的表设置不会根据需要“动态”设置“长度”的值。

如何将“长度”的DEFAULT值正确设置为“Pattern”字段的字符串长度?

2 个答案:

答案 0 :(得分:1)

默认值必须是常量。

您可以改为使用trigger

CREATE TRIGGER knowledge_length_default
AFTER INSERT ON knowledge
FOR EACH ROW
WHEN NEW.Length IS NULL
BEGIN
    UPDATE knowledge
    SET Length = length(NEW.Pattern)
    WHERE Entry = NEW.Entry;
END;

答案 1 :(得分:1)

您要分配的默认值是动态的,sqlite不支持。一个解决方案就是CL。说过。我将默认值定义为0并且不使用一个而是使用两个触发器(一个用于插入,另一个用于更新)。

CREATE TRIGGER default_length_on_insert AFTER INSERT ON knowledge WHEN NEW.Length IS 0
BEGIN
UPDATE knowledge SET Length=length(NEW.Pattern) WHERE ROWID = NEW.ROWID;
END;

CREATE TRIGGER default_length_on_update AFTER UPDATE ON knowledge
BEGIN
UPDATE knowledge SET Length=length(NEW.Pattern) WHERE ROWID = NEW.ROWID;
END;