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

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

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


当前回答

最近我不得不在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;

我希望这对你有用!

其他回答

修改表列< id >为< _id >

 String LastId = "id";

    database.execSQL("ALTER TABLE " + PhraseContract.TABLE_NAME + " RENAME TO " + PhraseContract.TABLE_NAME + "old");
    database.execSQL("CREATE TABLE " + PhraseContract.TABLE_NAME
    +"("
            + PhraseContract.COLUMN_ID + " INTEGER PRIMARY KEY,"
            + PhraseContract.COLUMN_PHRASE + " text ,"
            + PhraseContract.COLUMN_ORDER  + " text ,"
            + PhraseContract.COLUMN_FROM_A_LANG + " text"
    +")"
    );
    database.execSQL("INSERT INTO " +
            PhraseContract.TABLE_NAME + "("+ PhraseContract.COLUMN_ID +" , "+ PhraseContract.COLUMN_PHRASE + " , "+ PhraseContract.COLUMN_ORDER +" , "+ PhraseContract.COLUMN_FROM_A_LANG +")" +
            " SELECT " + LastId +" , "+ PhraseContract.COLUMN_PHRASE + " , "+ PhraseContract.COLUMN_ORDER +" , "+ PhraseContract.COLUMN_FROM_A_LANG +
            " FROM " + PhraseContract.TABLE_NAME + "old");
    database.execSQL("DROP TABLE " + PhraseContract.TABLE_NAME + "old");

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事务中封装所有这些;和提交;也可能是个好主意。

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

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

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

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

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

自版本2018-09-15 (3.25.0) Sqlite支持重命名列

https://sqlite.org/changes.html