SQLite修改列

时间:2010-04-21 19:17:22

标签: sqlite alter-table

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

  • 使用新架构创建新表
  • 将数据从旧表复制到新表
  • 放弃旧桌子
  • 将新表重命名为旧表名称
对于应该相对容易的事情而言,这似乎是一项荒谬的工作量。有没有更简单的方法?我需要做的就是更改现有列的约束并为其指定默认值。

4 个答案:

答案 0 :(得分:42)

这是SQLite的一个众所周知的缺点(MODIFY COLUMN上没有ALTER TABLE支持),但它位于list of SQL features that SQLite does not implement

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

答案 1 :(得分:22)

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

echo '.dump' | sqlite3 test.db > test.dump

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

cat test.dump | sqlite3 new-test.db

答案 2 :(得分:8)

正如here所说,SQLite没有实现这些功能。

作为旁注,您可以使用select:

创建表格的两个第一步
CREATE TABLE tmp_table AS SELECT id, name FROM src_table

答案 3 :(得分:1)

当我运行“CREATE TABLE tmp_table AS SELECT id,name FROM src_table”时,我丢失了所有列类型格式(例如,时间字段变成了整数字段

如最初所述,它似乎应该更容易,但这就是我要解决的问题。我有这个问题b / c我想改变列中的Not Null字段而Sqlite并没有真正帮助那里。

使用“SQLite Manager”Firefox插件浏览器(使用您喜欢的内容)。我通过复制旧的create语句创建了新表,进行了修改并执行了它。然后,为了复制数据,我只是突出显示了行,R-单击“将行复制为SQL”,将“someTable”替换为我的表名,然后执行SQL。