天天看點

sqlite 修改表的列sqlite 修改表的列

文章目錄

  • 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無法直接怼已經存在的列進行修改;如果要修改已經存在的列,那麼可以使用如下的方法:

  1. 重命名表。
  2. 重新建立表。
  3. 插入舊表中的資料。
  4. 删除舊的表。

下面使用例子來說明整個過程。

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不支援修改已經存在的列的屬性,如果需要修改可以使用重新建立表的方式來完成。