SQLite修改列

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

  • 用新的模式创build一个新表
  • 将旧表中的数据复制到新表中
  • 放下旧桌子
  • 将新表重命名为旧表名

对于那些应该相对容易的事来说,这似乎是一个荒谬的工作量。 有没有更简单的方法? 我需要做的就是改变现有列的约束,并给它一个默认值。

这是SQLite中最为人所知的缺点之一(在ALTER TABLE上没有MODIFY COLUMN支持),但它在SQLite没有实现的SQL特性列表上 。

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

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

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

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

 cat test.dump | sqlite3 new-test.db 

如这里所说,这些function不是由SQLite实现的。

作为一个方面的说明,你可以做一个创build表select两个第一步:

 CREATE TABLE tmp_table AS SELECT id, name FROM src_table 

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

正如最初所说,似乎应该更容易,但这是我所做的修复。 我有这个问题B / C我想改变一个列中的空值字段和Sqlite不真的帮助那里。

使用“SQLitepipe理器”的Firefox插件浏览器(使用你喜欢的)。 我通过复制旧的创build语句创build了新的表,进行了修改,并执行了它。 然后为了获得复制的数据,我只是突出显示了行,点击“复制行作为SQL”,用我的表名replace“someTable”,然后执行SQL。