sqlite - 如何重命名 SQLite 数据库表中的列?

标签 sqlite alter-table

我需要重命名 SQLite 数据库中某些表中的一些列。 我知道一个similar question之前在stackoverflow上问过,不过一般是针对SQL的,没有提到SQLite的情况。

来自 ALTER TABLE 的 SQLite 文档,我认为不可能“轻松地”做这样的事情(即单个 ALTER TABLE 语句)。

我想知道有人知道用 SQLite 做这种事情的通用 SQL 方法。

最佳答案

请注意,从版本 3.25.0 released September 2018 开始您现在可以使用 ALTER TABLErename a column .

下面是“创建新表并删除旧表”的原始答案。


假设您有一张表,需要将“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;

不要忘记重新创建索引、触发器等。The documentation更全面地了解陷阱和注意事项。

将所有这些包装在 BEGIN TRANSACTION;COMMIT; 中也可能是个好主意。

关于sqlite - 如何重命名 SQLite 数据库表中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/805363/

相关文章:

snowflake-cloud-data-platform - 雪花外部表 : Add new column

hadoop - 如何从 Hive 表中获取 lastaltertimestamp?

database - Alter table on global temporary table (preserve to delete)

MySQL:如果列不存在,如何添加?

mysql - MySQL 将 varchar 转换为 char 有什么作用?

sqlite - 在sqlite中使其简单

android - GreenDAO QueryBuilder 动态连接条件

vb.net -> =无法正常工作

sqlite查询以获取所有表名列表及其中的记录数

php - Laravel:连接到 sqlite 数据库抛出 "PDOException: Could not find driver"