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;
有兴趣的小伙伴,试试看吧!