2018-03-20

SQLite3中修改字段名

移动端开发的同学应该都有使用 SQLite 数据库,在 APP 迭代升级时有时会有这样的变态需求——不能动原来的数据库表,但要修改某个字段名……

下面就来探讨下针对这种情况,我们该如何操作表,才能达成修改字段名的需求。也许有人会有用以下两个语句……

ALTER TABLE user_table RENAME COLUMN name to name1; 
ALTER TABLE user_table CHANGE name name1 text;

但是经笔者验证发现,在 SQLite3中这根本是报错的……
那到底要怎么做呢—— 迂回作战,做法如下:

1.在旧表上增加一个修改后的字段。

  • 为了方便解说,这里笔者先建一个新的表user_table
CREATE TABLE IF NOT EXISTS user_table(ID integer PRIMARY KEY autoincrement, name text, age integer,uid real);
 INSERT INTO user_table (name,age,uid) VALUES('adward',11,108);
 INSERT INTO user_table (name,age,uid) VALUES('zhangSan',28,8);
 INSERT INTO user_table (name,age,uid) VALUES('李四',30,25);
 INSERT INTO user_table (name,age,uid) VALUES('王五',40,71);
  • 新增一个要修改后的字段,并赋值旧字段的值,新字段为 did ,用以替代 uid。
 ALTER TABLE user_table ADD COLUMN did INTEGER 
UPDATE user_table SET did = uid;
-- //如下语句在sqlite3中是有问题的
-- ALTER TABLE user_table DELETE COLUMN uid;

2.创建一个备份表user_table_backup,并拷贝除要删除字段外其它字段的值。

CREATE TABLE IF NOT EXISTS user_table_backup(ID integer PRIMARY KEY autoincrement, name text, age integer, did real);
INSERT INTO user_table_backup SELECT ID,name,age,did FROM user_table;

3.删除旧表,创建新表(字段名和备份表一致,表名和原表一样),至此大功造成!

DROP TABLE user_table;
CREATE TABLE IF NOT EXISTS  user_table(ID integer PRIMARY KEY autoincrement, name text, age integer, did real);
-- 将备份表上的字段拷贝到新表中
INSERT INTO user_table SELECT ID,name,age,did FROM user_table_backup;

有兴趣的小伙伴,试试看吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 楚甜:女主角 年龄:16(高一上学期) 星座:双子(1998年出生) 性格:内向,冷淡,孤独,但是向往热闹,有点双...
    可可豆子阅读 416评论 0 5
  • 只有到了七月半,我才会静下心来梳理您曾经走过的日子,任心底的悲伤如潮水般涌起深深将我淹灭。 2017年9月4号 ...
    林梅飞霞阅读 345评论 0 1
  • 难过的时候,无法说话。以前如此,现在更甚。
    安小年axn阅读 219评论 0 0
  • 人们总是以为自己可以知晓一切。 所以不必向瞎眼的人辩白,眼瞳里光华折射回忆和未来之间的现在,真实。还是镜子的另一面...
    2c297ebd0054阅读 230评论 0 1