在sqlite3中修改列的类型

Jor*_*eña 43 sqlite alter-table

我是SQLite 3的新手,刚才我必须在现有的表中添加一列.我这样做是为了做到这一点:ALTER TABLE thetable ADD COLUMN category;.

当然,我忘了指定列的类型.我想做的第一件事是删除该列,然后重新添加它.但是,似乎SQLite没有这么简单的方法,我不得不备份表并在没有列的情况下重新创建它.

这看起来很混乱,我想知道是否只有一种修改/添加列类型的方法.我想是这样,但我的搜索没有产生任何结果,对SQLite来说是新手,我想这是因为我的措辞在查询中没有了.

小智 45

显然,SQLite不支持删除或修改列.但请记住,列数据类型在SQLite 中也不严格.

也可以看看:

  • 因此,如果您将列类型定义为"INT",那么您可以将"VARCHAR"值插入其中吗? (4认同)
  • 是.您也可以在该列中插入非文本值:"SQLite使用更通用的动态类型系统.在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联." (来自我的第二个链接)指定列的类型在SQLite中的重要性远远低于其他RDBM. (2认同)
  • 这是真的......但是如果你以后用你将使用的数据类型创建其他表,那么你的连接查询将无法使用索引,因为列不会有相同的类型 (2认同)

小智 16

有一个更简单的方法:

ALTER TABLE your_main_table 
       ADD COLUMN new_column_name new_column_data_type
UPDATE your_main_table 
       SET new_column_name = CAST(old_column_name as new_data_type_you_want)
Run Code Online (Sandbox Code Playgroud)

我在本地机器上尝试过,它有效


Ins*_*ico 11

如果您更喜欢GUI,SQL Browser的数据库浏览器只需点击几下即可完成.

  1. "文件" - "打开数据库"
  2. 在"数据库结构"选项卡中,单击表格内容(而不是表格名称),然后单击"编辑"菜单,"修改表格",现在您可以使用下拉菜单更改任何列的数据类型.我将"文本"字段更改为"数字",以便检索数字范围内的数据.

SQLite的DB Browser是开源的,免费的.对于Linux,它可以从存储库中获得.

  • 澄清原来的答案和几个问题。截至 2021 年 5 月,修改表选项仍然存在。如果单击相关表的“架构”列,然后转到编辑菜单,您将找到修改表选项。但是,请注意,如果您在相关表上定义了视图,则此操作无法正常工作,因为该工具通过复制并重新创建表来执行此操作。 (2认同)

小智 5

可以通过重新创建表格。它对我有用,请按照以下步骤操作:

  1. 使用 as select * from your table 创建临时表
  2. 删除表,使用修改列类型创建表
  3. 现在将临时表中的记录插入到新创建的表中
  4. 删除临时表

在工作线程中执行上述所有步骤以减少 uithread 的负载

  • 这是一个示例: ```CREATE TABLE temp AS select a, b, c, CAST(d AS INTEGER) AS d_new from original;``` 稍后删除不需要的内容 (3认同)