我需要重命名SQLite数据库中一些表中的一些列。 我知道以前有人在stackoverflow上问过类似的问题,但这是针对一般的SQL,没有提到SQLite的情况。
从ALTER TABLE的SQLite文档中,我收集到不可能“轻松”地做这样的事情(即一个ALTER TABLE语句)。
我想知道有人知道一个通用的SQL方法做这样的事情与SQLite。
我需要重命名SQLite数据库中一些表中的一些列。 我知道以前有人在stackoverflow上问过类似的问题,但这是针对一般的SQL,没有提到SQLite的情况。
从ALTER TABLE的SQLite文档中,我收集到不可能“轻松”地做这样的事情(即一个ALTER TABLE语句)。
我想知道有人知道一个通用的SQL方法做这样的事情与SQLite。
当前回答
案例1:SQLite 3.25.0+
只有SQLite的3.25.0版本支持重命名列。如果你的设备满足这个要求,事情就很简单了。下面的查询可以解决你的问题:
ALTER TABLE "MyTable" RENAME COLUMN "OldColumn" TO "NewColumn";
案例2:SQLite旧版本
你必须遵循不同的方法来得到结果,这可能有点棘手
例如,如果你有一个这样的表:
CREATE TABLE student(Name TEXT, Department TEXT, Location TEXT)
如果您希望更改列Location的名称
步骤1:重命名原始表:
ALTER TABLE student RENAME TO student_temp;
步骤2:现在用正确的列名创建一个新表student:
CREATE TABLE student(Name TEXT, Department TEXT, Address TEXT)
步骤3:将原表中的数据复制到新表中:
INSERT INTO student(Name, Department, Address) SELECT Name, Department, Location FROM student_temp;
注意:上面的命令应该是一行。
步骤4:删除原来的表:
DROP TABLE student_temp;
通过这四个步骤,您可以手动更改任何SQLite表。 请记住,您还需要在新表上重新创建索引、查看器或触发器。
其他回答
请注意,从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事务中封装所有这些;和提交;也可能是个好主意。
创建一个具有所需列名的新列:COLNew。
ALTER TABLE {tableName} ADD COLUMN COLNew {type};
将旧列COLOld的内容复制到新列COLNew。
INSERT INTO {tableName} (COLNew) SELECT {COLOld} FROM {tableName}
注:以上一行必须使用括号。
最近我不得不在SQLite3中使用一个名为points的表,列为id lon lat。错误地,当导入表时,latitude的值存储在lon列中,反之亦然,因此一个明显的修复方法是重命名这些列。所以窍门是:
create table points_tmp as select id, lon as lat, lat as lon from points;
drop table points;
alter table points_tmp rename to points;
我希望这对你有用!
如前所述,有一个工具SQLite数据库浏览器,它可以做到这一点。Lyckily,这个工具保存用户或应用程序执行的所有操作的日志。执行此操作一次并查看应用程序日志,您将看到所涉及的代码。复制查询并根据需要粘贴。为我工作。希望这能有所帮助
Sqlite3 yourdb .dump > /tmp/db.txt 编辑/tmp/db.txt修改创建行的列名 Sqlite2 yourdb2 < /tmp/db.txt Mv /move yourdb2 yourdb