【问题标题】:sqlite3 change column default valuesqlite3 更改列默认值
【发布时间】:2020-06-25 11:46:51
【问题描述】:

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

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

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    如果不更换整张桌子,我认为您无法做到。来自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 并获取模式转储和数据。然后,您可以使用它快速创建修改后的架构并提取数据。
    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

    使用相同的架构(但您的新默认值)创建一个新数据库,附加两者,然后迁移。

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2019-07-05
      相关资源
      最近更新 更多