SQLite修改列

Nat*_*han 44 sqlite alter-table

我需要修改SQLite数据库中的列,但由于数据库已经在生产中,我必须以编程方式执行此操作.根据我的研究,我发现为了做到这一点,我必须做到以下几点.

  • 使用新架构创建新表
  • 将数据从旧表复制到新表
  • 放旧桌子
  • 将新表重命名为旧表名

对于应该相对容易的事情而言,这似乎是一项荒谬的工作量.有没有更简单的方法?我需要做的就是更改现有列的约束并为其指定默认值.

Dan*_*olo 42

这是SQLite的一个众所周知的缺点(不MODIFY COLUMN支持ALTER TABLE),但它在SQLite未实现的SQL功能列表中.

编辑:已删除的位提示它可能在将来的版本中受支持,因为页面已更新,表明不再是这种情况


Dav*_*zzi 22

如果修改不是太大(例如更改varchar的长度),则可以转储db,手动编辑数据库定义并再次将其导入:

echo '.dump' | sqlite3 test.db > test.dump
Run Code Online (Sandbox Code Playgroud)

然后使用文本编辑器打开文件,搜索要修改的定义,然后:

cat test.dump | sqlite3 new-test.db
Run Code Online (Sandbox Code Playgroud)


Jho*_*re- 9

至于说在这里,这几样功能不受SQLite的实现.

作为旁注,您可以使用选择创建表的两个第一步:

CREATE TABLE tmp_table AS SELECT id, name FROM src_table
Run Code Online (Sandbox Code Playgroud)

  • 好的伎俩,这让我免于询问"如何更改表格中的字段顺序?". (3认同)