如何更改 sqlite3 中表中现有列的默认值?
我有一个名为
notes
的表,其中有一个名为 hidden
的布尔列。默认设置为 true,我想设置为 false。
SQLite 现在支持 RENAME COLUMN、ADD COLUMN 和 DROP COLUMN,因此您可以通过以下方式更改列默认值:
alter table t rename column c to c_old
alter table t add c boolean default false
update t set c = c_old
alter table t drop column c_old
感谢 dr fu manchu 关于 SQLite 更新其 ALTER TABLE 支持的提醒。
我认为如果不更换整个桌子就可以。来自精细手册:
SQLite 未实现的 SQL 功能
完整的 ALTER TABLE 支持
仅支持 ALTER TABLE 命令的 RENAME TABLE 和 ADD COLUMN 变体。其他种类的 ALTER TABLE 操作,例如 DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT 等均省略。
因此无法修改 SQLite 中的现有列。我认为您必须创建一个具有适当默认值的新表
hidden
,复制所有数据,删除原始 notes
表,然后 重命名新表。
SQLite 数据库浏览器允许您删除列,因此您可以用它删除列,然后使用 sqlite3 命令行工具手动添加默认列。
创建具有相同架构(但新的默认值)的新数据库,附加两者并迁移。
为了删除“ALTER TABLE”语法不支持的列或其他更改,我创建一个新表,将日期迁移到其中,删除旧表,然后将新表重命名为原始名称。
处理可修改默认值的一种可行方法是将默认值存储在另一个表中。在执行插入操作之前从该表中读取以获取当前默认值。这样,默认值只是数据库中的普通 ole 数据,而不是架构的一部分。