我需要重命名SQLite数据库中一些表中的一些列。 我知道以前有人在stackoverflow上问过类似的问题,但这是针对一般的SQL,没有提到SQLite的情况。
从ALTER TABLE的SQLite文档中,我收集到不可能“轻松”地做这样的事情(即一个ALTER TABLE语句)。
我想知道有人知道一个通用的SQL方法做这样的事情与SQLite。
我需要重命名SQLite数据库中一些表中的一些列。 我知道以前有人在stackoverflow上问过类似的问题,但这是针对一般的SQL,没有提到SQLite的情况。
从ALTER TABLE的SQLite文档中,我收集到不可能“轻松”地做这样的事情(即一个ALTER TABLE语句)。
我想知道有人知道一个通用的SQL方法做这样的事情与SQLite。
当前回答
如前所述,有一个工具SQLite数据库浏览器,它可以做到这一点。Lyckily,这个工具保存用户或应用程序执行的所有操作的日志。执行此操作一次并查看应用程序日志,您将看到所涉及的代码。复制查询并根据需要粘贴。为我工作。希望这能有所帮助
其他回答
需要重命名一些表中的一些列
另一种方法是使用多个SQLite3命令来“重命名”列, 在“一些”表中,根据需要重复:
.output tmp
SELECT "ALTER TABLE """|| sqlite_master.name ||""" RENAME COLUMN old_name TO new_name;" FROM sqlite_master
WHERE type = "table" AND sqlite_master.name NOT LIKE 'sqlite_%';
.read tmp
源
Sqlite3 yourdb .dump > /tmp/db.txt 编辑/tmp/db.txt修改创建行的列名 Sqlite2 yourdb2 < /tmp/db.txt Mv /move yourdb2 yourdb
请注意,从2018年9月发布的3.25.0版本开始,您现在可以使用ALTER TABLE重命名列。
原来“创建新表和删除旧表”的答案如下。
假设你有一个表,需要将“colb”重命名为“col_b”:
首先创建一个临时名称的新表,该名称基于旧表定义,但使用了更新的列名:
CREATE TABLE tmp_table_name (
col_a INT
, col_b INT
);
然后从原始表复制内容。
INSERT INTO tmp_table_name(col_a, col_b)
SELECT col_a, colb
FROM orig_table_name;
放下旧桌子。
DROP TABLE orig_table_name;
最后将临时表重命名为原来的表:
ALTER TABLE tmp_table_name RENAME TO orig_table_name;
不要忘记重新创建索引、触发器等。文档更全面地描述了这些陷阱和注意事项。
在BEGIN事务中封装所有这些;和提交;也可能是个好主意。
在挖掘中,我发现了这个多平台(Linux | Mac | Windows)图形化工具,称为DB Browser for SQLite,它实际上允许用户以一种非常用户友好的方式重命名列!
Edit | Modify Table |选中“Table | Edit Field”。点击点击!瞧!
然而,如果有人想分享一种程序化的方式来做这件事,我很乐意知道!
引用sqlite文档:
SQLite支持的有限子集 ALTER TABLE。ALTER TABLE命令 在SQLite中允许用户重命名 表或添加新列到 现有的表。不能重命名列、删除列或从表中添加或删除约束。
当然,您可以用新的布局创建一个新表,SELECT * FROM old_table,并用您将收到的值填充新表。