我有一个我想要创建的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”字段的字符串长度?
答案 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;