1
我要处理的SqLite 3表中的某些字段具有针对插入的每个新行动态计算的默认值,这就是每个插入没有例外的情况下要执行的操作。但它实际上已经足够明确地指定与其他字段值一起的字段值,并将这些值记录到数据库中,而不是记录什么是要计算的。如何在将新行插入SqLite表时禁止指定特定的字段?
触发器的正确形式是什么,或者中止带有某些字段值的插入,值不会被省略,或者只是放弃这些值,让定义的默认值被使用呢?
我要处理的SqLite 3表中的某些字段具有针对插入的每个新行动态计算的默认值,这就是每个插入没有例外的情况下要执行的操作。但它实际上已经足够明确地指定与其他字段值一起的字段值,并将这些值记录到数据库中,而不是记录什么是要计算的。如何在将新行插入SqLite表时禁止指定特定的字段?
触发器的正确形式是什么,或者中止带有某些字段值的插入,值不会被省略,或者只是放弃这些值,让定义的默认值被使用呢?
没有办法将明确指定的值与恰好与默认值相同的值区分开默认值。
此外,不可能更改插入语句将插入的内容(除了附加的UPDATE语句)。
你能做的最好是检查所有这些插入值与默认值相同的触发器:
CREATE TABLE MyTable (
Name TEXT,
Date DATE DEFAULT CURRENT_DATE
);
CREATE TRIGGER MyTable_CheckDefaultDate
BEFORE INSERT ON MyTable
WHEN ifnull(NEW.Date, '') <> CURRENT_DATE
BEGIN
SELECT RAISE(FAIL, "date must be default");
END;