【发布时间】:2020-06-25 11:46:51
【问题描述】:
如何在 sqlite3 中更改表中现有列的默认值?
我有一个名为 notes 的表,其中包含一个名为 hidden 的布尔列。默认设置为true,我想设置为false。
【问题讨论】:
标签: sqlite
如何在 sqlite3 中更改表中现有列的默认值?
我有一个名为 notes 的表,其中包含一个名为 hidden 的布尔列。默认设置为true,我想设置为false。
【问题讨论】:
标签: sqlite
如果不更换整张桌子,我认为您无法做到。来自fine manual:
SQLite 未实现的 SQL 功能
完整的 ALTER TABLE 支持
仅支持 ALTER TABLE 命令的 RENAME TABLE 和 ADD COLUMN 变体。省略了其他类型的 ALTER TABLE 操作,例如 DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT 等。
因此无法修改 SQLite 中的现有列。我认为您必须为hidden 创建一个具有适当默认值的新表,复制所有数据,删除原始notes 表,然后删除rename the new one。
SQLite 通过故意省略许多功能来保持精简。
【讨论】:
drop table <table_name> 之前,请确保运行 .dump 并获取模式转储和数据。然后,您可以使用它快速创建修改后的架构并提取数据。
SQLite 数据库浏览器允许您删除列,因此您可以使用它删除列,然后使用 sqlite3 命令行工具手动添加默认列。
【讨论】:
使用相同的架构(但您的新默认值)创建一个新数据库,附加两者,然后迁移。
为了删除“ALTER TABLE”语法不支持的列或其他更改,我创建了一个新表,将日期迁移到其中,删除旧表,并将新表重命名为原始名称。
【讨论】: