sqlite3更改列默认值

问题描述 投票:0回答:4

如何更改 sqlite3 中表中现有列的默认值?

我有一个名为

notes
的表,其中有一个名为
hidden
的布尔列。默认设置为 true,我想设置为 false。

sqlite
4个回答
28
投票

新版本

SQLite 现在支持 RENAME COLUMN、ADD COLUMN 和 DROP COLUMN,因此您可以通过以下方式更改列默认值:

  1. 重命名列:
    alter table t rename column c to c_old
  2. 添加具有新默认值的列:
    alter table t add c boolean default false
  3. 复制数据:
    update t set c = c_old
  4. 删除旧列:
    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
表,然后 重命名新表


0
投票

SQLite 数据库浏览器允许您删除列,因此您可以用它删除列,然后使用 sqlite3 命令行工具手动添加默认列。


0
投票

创建具有相同架构(但新的默认值)的新数据库,附加两者并迁移。

为了删除“ALTER TABLE”语法不支持的列或其他更改,我创建一个新表,将日期迁移到其中,删除旧表,然后将新表重命名为原始名称。

https://stackoverflow.com/a/998652/1020467

https://www.sqlite.org/lang_altertable.html


0
投票

处理可修改默认值的一种可行方法是将默认值存储在另一个表中。在执行插入操作之前从该表中读取以获取当前默认值。这样,默认值只是数据库中的普通 ole 数据,而不是架构的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.