更改sqlite表以添加具有默认值的时间戳列

更改sqlite表以添加具有默认值的时间戳列,第1张

概述在sqlite中ALTER表ADD列foo时间戳默认为CURRENT_TIMESTAMP是不可能的,但是有没有聪明的解决方法? SQLite在添加列时实际上不会修改表内容,因此默认值必须是不需要读取表的值. 要解决此问题,您可以使用触发器而不是默认值: >添加没有默认值的列: ALTER TABLE MyTable ADD COLUMN foo timestamp DEFAULT NULL; >使 在sqlite中ALTER表ADD列foo时间戳默认为CURRENT_TIMESTAMP是不可能的,但是有没有聪明的解决方法?解决方法 sqlite在添加列时实际上不会修改表内容,因此默认值必须是不需要读取表的值.

要解决此问题,您可以使用触发器而不是默认值:

>添加没有默认值的列:

ALTER table Mytable ADD ColUMN foo timestamp DEFAulT NulL;

>使用触发器设置默认值:

ADD TRIGGER Mytable_foo_defaultAFTER INSERT ON MytableFOR EACH ROWWHEN NEW.foo IS NulLBEGIN    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_masterSET sql = replace(sql,'DEFAulT NulL /* replace me */','DEFAulT CURRENT_TIMESTAMP')WHERE type = 'table'  AND name = 'Mytable';PRAGMA writable_schema = off;

>重新打开数据库(否​​则,sqlite将不知道新的默认值).

总结

以上是内存溢出为你收集整理的更改sqlite表以添加具有默认值的时间戳列全部内容,希望文章能够帮你解决更改sqlite表以添加具有默认值的时间戳列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1157376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存