這兩天幫朋友做乙個關於地熱資料處理的小軟體再次用到了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...