編者注:這些關於sqlite與sql差異的問題,你是否遇到過呢?筆者在這裡為大家總結出了使用sqlite時,與sql之間經常會出現的一些差異性問題,希望對大家的使用有所幫助。
一、常見問題彙總
1 top
select但是這條sql語句在sqlite中是無法執行的,應該改為:top10 *
from
[index
] order
byindexid
desc
;
select其中limit 0,10表示從第0條記錄開始,往後一共讀取10條* from
[index
] order
byindexid
desc
limit 0,10;
2 建立檢視(create view)
sqlite在建立多表檢視的時候有乙個bug,問題如下:
create上面這條sql語句執行後會顯示成功,但是實際上除了view
watch_single
asselect
distinctwatch_item.[watchid],watch_item.[itemid]
from
watch_item;
select能執行之外是無法執行其他任何語句的。其原因在於建立檢視的時候指定了字段所在的表名,而sqlite並不能正確地識別它。所以上面的建立語句要改為:count
(*)
from
[watch_single ]
where
watch_ single.watchid = 1;
create但是隨之而來的問題是如果是多表的檢視,且表間有重名字段的時候該怎麼辦?view
watch_single
asselect
distinct
[watchid],[itemid]
from
watch_item;
3 count(distinct column)
sqlite在執行如下語句的時候會報錯:
select其原因是sqlite的所有內建函式都不支援distinct限定,所以如果要統計不重複的記錄數的時候會出現一些麻煩。比較可行的做法是先建立乙個不重複的記錄表的檢視,然後再對該檢視進行計數。count
(distinct
watchid)
from
[watch_item]
where
watch_item.watchid = 1;
4 外連線
雖然sqlite官方已經聲稱left outer join 已經實現,但還沒有 right outer join 和 full outer join。但是實際測試表明似乎並不能夠正常的工作。以下三條語句在執行的時候均會報錯:
select此外經過測試用+號代替*號也是不可行的。tags.[tagid]
from
[tags],[tag_rss]
where
tags.[tagid] = tag_rss.[tagid](*);
select
tags.[tagid]
from
[tags],[tag_rss]
where
left
outer
join
tag_rss.[tagid] = tags.[tagid];
select
tags.[tagid]
from
[tags],[tag_rss]
where
left
join
tag_rss.[tagid] = tags.[tagid];
二、收集sqlite與sql server的語法差異
1.返回最後插入的標識值
返回最後插入的標識值sql server用@@identity
sqlite用標量函式last_insert_rowid()
返回通過當前的 sqlconnection 插入到資料庫的最後一行的行識別符號(生成的主鍵)。此值與 sqlconnection.lastinsertrowid 屬性返回的值相同。
2.top n
在sql server中返回前2行可以這樣:
selectsqlite中用limit,語句如下:top2 *
from
aa
order
byids
desc
select3.getdate ( )* from
aa
order
byids
desc
limit 2
在sql server中getdate ( )返回當前系統日期和時間
sqlite中沒有
4.exists語句
sql server中判斷插入(不存在ids=5的就插入)
if在sqlite中可以這樣notexists (
select
* from
aa where
ids=5)
begin
insert
into
aa(nickname)
select
't'end
insert5.巢狀事務into
aa(nickname)
select
't'where
notexists(
select
* from
aa where
ids=5)
sqlite僅允許單個活動的事務
6.right 和 full outer join
sqlite不支援 right outer join 或 full outer join
7.可更新的檢視
sqlite檢視是唯讀的。不能對檢視執行 delete、insert 或 update 語句,sql server是可以對檢視 delete、insert 或 update
三、新增內容
1.關於日期時間型別列的預設設定:
對"列"的設定包括三個字段:name、type、default
name:logtime(隨意命名);
type:
date型別,得到的值形如"2011-04-23",
datetime型別,得到的值形如"2011-04-23 11:49:04.000";
default:datetime('now','localtime') 我採用的是兩個引數,後面的localtime不要丟棄,不然時間不準確。
SQLite 資料庫安裝與建立資料庫
嵌入式關聯式資料庫 ubuntu sudo apt getinstall sqlite3 sqlite3 dev centos,orfedora yum install sqlite3 sqlite3 dev 使用下面的命令來檢查您的機器上是否已經安裝了 sqlite。sqlite3 exit 退出...
SQLite資料庫損壞與修復
導致sqlite資料庫損壞的情況大致可歸結為4類 檔案覆蓋問題 檔案鎖問題 資料同步問題 記憶體問題 sqlite資料庫檔案被覆蓋是可能的,畢竟是乙個普通的磁碟檔案,意味著所有的程序都可以開啟和覆蓋,所以不可能完全避免檔案覆蓋的情況。1.多執行緒寫資料庫問題。sqlite資料庫是支援多程序併發讀寫,...
資料庫 Mysql 與 ORACLE 開發差異
中文描述 oracle 大小範圍 mysql 大小範圍 日期時間型別 date datetime 數值型別 number int,decimal 變長字串 varchar2 10 1 4000bytes varchar 0 65535bytes 定長字串 char 10 1 2000bytes ch...