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