SQLite3中修改字段名
移動(dòng)端開發(fā)的同學(xué)應(yīng)該都有使用 SQLite 數(shù)據(jù)庫(kù),在 APP 迭代升級(jí)時(shí)有時(shí)會(huì)有這樣的變態(tài)需求——不能動(dòng)原來的數(shù)據(jù)庫(kù)表,但要修改某個(gè)字段名……
下面就來探討下針對(duì)這種情況,我們?cè)撊绾尾僮鞅?,才能達(dá)成修改字段名的需求。也許有人會(huì)有用以下兩個(gè)語(yǔ)句……
ALTER TABLE user_table RENAME COLUMN name to name1;
ALTER TABLE user_table CHANGE name name1 text;
但是經(jīng)筆者驗(yàn)證發(fā)現(xiàn),在 SQLite3中這根本是報(bào)錯(cuò)的……
那到底要怎么做呢—— 迂回作戰(zhàn),做法如下:
1.在舊表上增加一個(gè)修改后的字段。
- 為了方便解說,這里筆者先建一個(gè)新的表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);
- 新增一個(gè)要修改后的字段,并賦值舊字段的值,新字段為 did ,用以替代 uid。
ALTER TABLE user_table ADD COLUMN did INTEGER
UPDATE user_table SET did = uid;
-- //如下語(yǔ)句在sqlite3中是有問題的
-- ALTER TABLE user_table DELETE COLUMN uid;
2.創(chuàng)建一個(gè)備份表user_table_backup,并拷貝除要?jiǎng)h除字段外其它字段的值。
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.刪除舊表,創(chuàng)建新表(字段名和備份表一致,表名和原表一樣),至此大功造成!
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;
有興趣的小伙伴,試試看吧!