概述

最近有个需求需要更新sqlite数据库中,某个表的列明,但是从网上了解到sqlite的alter功能并不完善,不支持重命名列名.
所以只能采用笨方法了.

操作流程

假设要修改的表名为tab,原列名:c1,修改为:c2;

  1. 重命名表
alter table tab rename to tmp_tab;
  1. 创建相同结构的新表(注意使用新的列名)
create table tab(...);
  1. 将原始数据追加到新表
insert into tab (c2) select c1 from tmp_tab;

如果原表tmp_post和新创建的标post列数一致,并且是一一对应的话,可以用一下语句导入。

insert into tab select * from tmp_tab;
  1. 如果之前的表中存在索引,需要重新创建;
drop index tab_index;
-- 假设为userid列创建索引
create index tab_index on tab(userid);
  1. 删除旧表
drop table tmp_tab;

总结

虽然麻烦,但这种需求还是可以实现的,幸好这种需求并不多见.
如果是mysql或者sqlserver,只用下面的一条语句就可以完成了.

-- 任选其一
alter table tab change c1 c2 varchar(4);
alter table tab change column c1 c2 varchar(4);

甚至可以同时修改多列:

alter table tab
    change c1 c2 varchar(4),
    change x1 x2 date;