美文网首页
2018-03-20

2018-03-20

作者: 雁过无痕_AdwardWong | 来源:发表于2018-03-20 14:37 被阅读0次

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;

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

相关文章

网友评论

      本文标题:2018-03-20

      本文链接:https://www.haomeiwen.com/subject/eeivqftx.html