我需要重命名SQLite数据库中一些表中的一些列。 我知道以前有人在stackoverflow上问过类似的问题,但这是针对一般的SQL,没有提到SQLite的情况。
从ALTER TABLE的SQLite文档中,我收集到不可能“轻松”地做这样的事情(即一个ALTER TABLE语句)。
我想知道有人知道一个通用的SQL方法做这样的事情与SQLite。
我需要重命名SQLite数据库中一些表中的一些列。 我知道以前有人在stackoverflow上问过类似的问题,但这是针对一般的SQL,没有提到SQLite的情况。
从ALTER TABLE的SQLite文档中,我收集到不可能“轻松”地做这样的事情(即一个ALTER TABLE语句)。
我想知道有人知道一个通用的SQL方法做这样的事情与SQLite。
当前回答
创建一个具有所需列名的新列:COLNew。
ALTER TABLE {tableName} ADD COLUMN COLNew {type};
将旧列COLOld的内容复制到新列COLNew。
INSERT INTO {tableName} (COLNew) SELECT {COLOld} FROM {tableName}
注:以上一行必须使用括号。
其他回答
需要重命名一些表中的一些列
另一种方法是使用多个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
源
引用sqlite文档:
SQLite支持的有限子集 ALTER TABLE。ALTER TABLE命令 在SQLite中允许用户重命名 表或添加新列到 现有的表。不能重命名列、删除列或从表中添加或删除约束。
当然,您可以用新的布局创建一个新表,SELECT * FROM old_table,并用您将收到的值填充新表。
在挖掘中,我发现了这个多平台(Linux | Mac | Windows)图形化工具,称为DB Browser for SQLite,它实际上允许用户以一种非常用户友好的方式重命名列!
Edit | Modify Table |选中“Table | Edit Field”。点击点击!瞧!
然而,如果有人想分享一种程序化的方式来做这件事,我很乐意知道!
案例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}
注:以上一行必须使用括号。