SQLite資料庫建立臨時表 增加列的方法

2021-08-07 20:19:45 字數 3061 閱讀 9075

這兩天幫朋友做乙個關於地熱資料處理的小軟體再次用到了sqlite資料庫,不過這次不是使用其快取/記憶體資料庫的功能,而是純粹將其作為乙個嵌入式檔案資料庫來使用的,其實對於資料量級相對比較小的系統而言,嵌入式資料庫sqlite絕對是乙個非常理想的選擇。但是,話又說回來,畢竟是乙個沒有dba的資料庫系統,因此所能實現的功能相對就比較簡單,這不,遇到了想在一張表中增加一列的功能時著實讓我頭疼了乙個下午的時光。

我們都知道,資料庫表中增加/刪除一列用sql語句實現很簡單:

alter   table  表名稱   add   列名稱   資料型別;                        //  資料庫表中增加一列

alter   table   表名稱  drop  column   列名稱    資料型別;      //  資料庫中刪除一列          

但是,對於sqlite資料庫而言有兩個問題:

(1) 可以增加一列,但是該列只能是表的最後一列。

(2)不能刪除一列。

對於第乙個問題,如果你不覺得不爽的話,也沒什麼關係,並不影響使用,但是對於第二條而言問題就很大了,不支援刪除一列還是很麻煩的事情。還要,條條大路通帝都。通過建立臨時表的方法,可以很好的解決這個問題。

其實,說簡單點兒,如果想刪除表a中的一列或者一行,我們首先通過sql建立乙個臨時表,然後把錶a中期望保留的資料儲存到臨時表中,然後把錶a刪除,再通過sql的create語句建立表a,最後將臨時表中的資料再複製回來,算是一種曲線解決問題的方法吧。^_^

還是舉兩個例子說明最簡單明瞭。

例1:在表coordinate中增加一列自動增長的id列。

[sql]view plain

copy

print?

begin

transaction;  

create

temporary

table ptemp(provinceid int, longitude double, latitude double);  

insert

into ptemp select provinceid,longitude, latitude from coordinate;  

drop

table coordinate;  

create

table provincecoordinate(id integer

primary

key autoincrement, provinceid int, longitude double, latitude double);  

insert

into provincecoordinate(provinceid, longitude, latitude) select provinceid, longitude, latitude from ptemp;  

drop

table ptemp;  

commit;  

begin transaction;

create temporary table ptemp(provinceid int, longitude double, latitude double);

insert into ptemp select provinceid,longitude, latitude from coordinate;

drop table coordinate;

create table provincecoordinate(id integer primary key autoincrement, provinceid int, longitude double, latitude double);

insert into provincecoordinate(provinceid, longitude, latitude) select provinceid, longitude, latitude from ptemp;

drop table ptemp;

commit;

例2:在表china中增加一列自動增長的id列。

[sql]view plain

copy

print?

begin

transaction;  

create

temporary

table ptemp(longitude double, latitude double);  

insert

into ptemp select longitude, latitude from china;  

drop

table china;  

create

table china(id integer

primary

key autoincrement, longitude double, latitude double);  

insert

into china(longitude, latitude) select longitude, latitude from ptemp;  

drop

table ptemp;  

commit;  

begin transaction;

create temporary table ptemp(longitude double, latitude double);

insert into ptemp select longitude, latitude from china;

drop table china;

create table china(id integer primary key autoincrement, longitude double, latitude double);

insert into china(longitude, latitude) select longitude, latitude from ptemp;

drop table ptemp;

commit;

阿科

2023年9月22日於北京郵電大學新科研樓302

資料庫建立臨時表

表名前使用乙個 號,臨時表是區域性的,使用兩個 號,臨時表是全域性的,在斷開連線後sql會自動刪除臨時表 create table a id int,name varchar 50 insert into a id,name values 1,123 select from a drop table...

SQLite資料庫建立臨時表 增加列的方法

這兩天幫朋友做乙個關於地熱資料處理的小軟體再次用到了sqlite資料庫,不過這次不是使用其快取 記憶體資料庫的功能,而是純粹將其作為乙個嵌入式檔案資料庫來使用的,其實對於資料量級相對比較小的系統而言,嵌入式資料庫sqlite絕對是乙個非常理想的選擇。但是,話又說回來,畢竟是乙個沒有dba的資料庫系統...

資料庫中建立臨時表

語法 create table albums artist char 30 album name char 50 media type int go該錶也可以使用下邊的命令來手動刪除 drop table albums go當使用者退出sql server 時該表也可以被自動地刪除如果你是在自態sq...