文章目錄
- sqlite 修改表的列
-
- 1. 問題的引入
- 2. ALTER指令
-
- 2.1 表重命名
- 2.2 新增列
- 3. 重建表修改列
-
- 3.1 重命名表
- 3.2 重新建立表
- 3.3 插入資料
- 3.4 删除舊的表
- 4. 總結
sqlite 修改表的列
軟體都是在不斷的更新和變化的,在軟體的世界列唯一不變的就是變化;同樣對于資料庫來講,也存在一個資料庫更新或者降級的問題,本文來讨論一下SQLITE資料庫表列修改的方法。
1. 問題的引入
假如在我們的項目資料庫中存在一個表叫做COMPANY,記錄公司所有的員工資訊,建立表的代碼如下:
CREATE TABLE IF NOT EXISTS COMPANY(
ID PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INTEGER NOT NULL,
ADDRESS TEXT NOT NULL,
PHONE INTEGER NOT NULL
);
建立完成表之後,我們檢視表的結構資訊,如下:
sqlite> .schema company
CREATE TABLE COMPANY(
ID PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INTEGER NOT NULL,
ADDRESS TEXT NOT NULL,
PHONE INTEGER NOT NULL
);
接着我們向表中存放幾個員工資訊:
INSERT INTO COMPANY(ID, NAME, AGE, ADDRESS, PHONE) VALUES(0, 'JACK', 20, 'BEIJING', '123456789');
INSERT INTO COMPANY(ID, NAME, AGE, ADDRESS, PHONE) VALUES(1, 'TOM', 21, 'SHANGHAI', '12332145678');
插入之後的資料如下:
sqlite> SELECT * FROM COMPANY;
ID|NAME|AGE|ADDRESS|PHONE
0|JACK|20|BEIJING|123456789
1|TOM|21|SHANGHAI|12332145678
突然,我們在員工入職的時候發現了一個問題,一個員工的手機号是這種"0755-67899876", 顯然這種情況無法使用INTEGER來存儲了,我們需要對表進行更新,那麼應該怎麼辦呢?
2. ALTER指令
最先想到的指令就是ALTER指令修改邊,我們看下SQLITE的這個指令有什麼功能:
SQLite 的 ALTER TABLE 指令不通過執行一個完整的轉儲和資料的重載來修改已有的表。您可以使用 ALTER TABLE 語句重命名表,使用 ALTER TABLE 語句還可以在已有的表中添加額外的列。
在 SQLite 中,除了重命名表和在已有的表中添加列,ALTER TABLE 指令不支援其他操作。
也就是sqlite中支援如下的操作:
CREATE TABLE TEST(
ID INTEGER PRIMARY KEY NOT NULL,
AGE INTEGER NOT NULL
);
2.1 表重命名
重命名表的文法如下:
重命名的過程如下:
sqlite> .tables
COMPANY TEST
sqlite> ALTER TABLE TEST RENAME TO TESTBAK;
sqlite> .tables
COMPANY TESTBAK
2.2 新增列
文法如下:
執行過程如下:
sqlite> ALTER TABLE TESTBAK ADD COLUMN NAME TEXT NOT NULL;
sqlite> .schema testbak
CREATE TABLE IF NOT EXISTS "TESTBAK"(
ID INTEGER PRIMARY KEY NOT NULL,
AGE INTEGER NOT NULL
, NAME TEXT NOT NULL);
3. 重建表修改列
顯然,從上面的分析我們可以看出,SQLITE無法直接怼已經存在的列進行修改;如果要修改已經存在的列,那麼可以使用如下的方法:
- 重命名表。
- 重新建立表。
- 插入舊表中的資料。
- 删除舊的表。
下面使用例子來說明整個過程。
3.1 重命名表
執行過程如下:
sqlite> ALTER TABLE COMPANY RENAME TO COMPANY_TMP;
sqlite> .tables
COMPANY_TMP TESTBAK
3.2 重新建立表
使用
CREATE TABLE COMPANY
重新建立表:
CREATE TABLE COMPANY(
ID PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INTEGER NOT NULL,
ADDRESS TEXT NOT NULL,
PHONE TEXT NOT NULL
);
3.3 插入資料
INSERT INTO COMPANY(ID, NAME, AGE, ADDRESS, PHONE)
SELECT ID, NAME, AGE, ADDRESS, PHONE
FROM COMPANY_TMP;
插入資料之後的表内容如下:
sqlite> SELECT * FROM COMPANY;
ID|NAME|AGE|ADDRESS|PHONE
0|JACK|20|BEIJING|123456789
1|TOM|21|SHANGHAI|12332145678
3.4 删除舊的表
sqlite> DROP TABLE COMPANY_TMP;
sqlite> .tables
COMPANY TESTBAK
4. 總結
SQLITE不支援修改已經存在的列的屬性,如果需要修改可以使用重新建立表的方式來完成。