更改sqlite表以添加具有默认值的时间戳列
发布时间:2020-12-12 18:59:43 所属栏目:百科 来源:网络整理
导读:在sqlite中ALTER表ADD列foo时间戳默认为CURRENT_TIMESTAMP是不可能的,但是有没有聪明的解决方法? 解决方法 SQLite在添加列时实际上不会修改表内容,因此默认值必须是不需要读取表的值. 要解决此问题,您可以使用触发器而不是默认值: 添加没有默认值的列: AL
在sqlite中ALTER表ADD列foo时间戳默认为CURRENT_TIMESTAMP是不可能的,但是有没有聪明的解决方法?
解决方法SQLite在添加列时实际上不会修改表内容,因此默认值必须是不需要读取表的值.要解决此问题,您可以使用触发器而不是默认值: >添加没有默认值的列: ALTER TABLE MyTable ADD COLUMN foo timestamp DEFAULT NULL; >使用触发器设置默认值: ADD TRIGGER MyTable_foo_default AFTER INSERT ON MyTable FOR EACH ROW WHEN NEW.foo IS NULL BEGIN UPDATE MyTable SET foo = CURRENT_TIMESTAMP WHERE rowid = NEW.rowid; END; 或者,首先修改表内容,以便所有行都有一个值,然后设置默认值: >添加没有默认值的列: ALTER TABLE MyTable ADD COLUMN foo timestamp DEFAULT NULL /* replace me */; >将列值设置为所有行中的某个值(实际值无关紧要,重要的是所有行现在都有新列): UPDATE MyTable SET foo = CURRENT_TIMESTAMP; >更改默认值(文档:PRAGMA writable_schema,sqlite_master): PRAGMA writable_schema = on; UPDATE sqlite_master SET sql = replace(sql,'DEFAULT NULL /* replace me */','DEFAULT CURRENT_TIMESTAMP') WHERE type = 'table' AND name = 'MyTable'; PRAGMA writable_schema = off; >重新打开数据库(否??则,SQLite将不知道新的默认值). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |