我需要重命名SQLite数据库中一些表中的一些列。 我知道以前有人在stackoverflow上问过类似的问题,但这是针对一般的SQL,没有提到SQLite的情况。

从ALTER TABLE的SQLite文档中,我收集到不可能“轻松”地做这样的事情(即一个ALTER TABLE语句)。

我想知道有人知道一个通用的SQL方法做这样的事情与SQLite。


当前回答

此问题已在2018-09-15(3.25.0)中修复

增强ALTER TABLE命令: 增加了使用ALTER table table RENAME COLUMN oldname TO newname重命名表中的列的支持。 修复表重命名特性,以便在触发器和视图中更新对重命名表的引用。

您可以在ALTER TABLE下面找到新的语法文档

RENAME COLUMN TO语法将表table-name的COLUMN -name更改为new-column-name。在表定义本身以及引用该列的所有索引、触发器和视图中更改列名。如果列名更改将导致触发器或视图中的语义歧义,则RENAME column将失败并报错,并且不会应用任何更改。

图片来源:https://www.sqlite.org/images/syntax/alter-table-stmt.gif

例子:

CREATE TABLE tab AS SELECT 1 AS c;

SELECT * FROM tab;

ALTER TABLE tab RENAME COLUMN c to c_new;

SELECT * FROM tab;

db-fiddle.com演示


Android支持

在撰写本文时,Android的API 27正在使用SQLite包3.19版本。

基于Android正在使用的当前版本,这个更新将在SQLite的3.25.0版本中发布,我想说的是,在Android添加此支持之前,您需要等待(大约API 33)。

而且,即使这样,如果你需要支持任何比API 33更老的版本,你也不能使用这个。

其他回答

案例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表。 请记住,您还需要在新表上重新创建索引、查看器或触发器。

创建一个具有所需列名的新列:COLNew。

ALTER TABLE {tableName} ADD COLUMN COLNew {type};

将旧列COLOld的内容复制到新列COLNew。

INSERT INTO {tableName} (COLNew) SELECT {COLOld} FROM {tableName}

注:以上一行必须使用括号。

引用sqlite文档:

SQLite支持的有限子集 ALTER TABLE。ALTER TABLE命令 在SQLite中允许用户重命名 表或添加新列到 现有的表。不能重命名列、删除列或从表中添加或删除约束。

当然,您可以用新的布局创建一个新表,SELECT * FROM old_table,并用您将收到的值填充新表。

如前所述,有一个工具SQLite数据库浏览器,它可以做到这一点。Lyckily,这个工具保存用户或应用程序执行的所有操作的日志。执行此操作一次并查看应用程序日志,您将看到所涉及的代码。复制查询并根据需要粘贴。为我工作。希望这能有所帮助

在挖掘中,我发现了这个多平台(Linux | Mac | Windows)图形化工具,称为DB Browser for SQLite,它实际上允许用户以一种非常用户友好的方式重命名列!

Edit | Modify Table |选中“Table | Edit Field”。点击点击!瞧!

然而,如果有人想分享一种程序化的方式来做这件事,我很乐意知道!