程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 解析SQLite中的罕見成績與總結詳解

解析SQLite中的罕見成績與總結詳解

編輯:MySQL綜合教程

解析SQLite中的罕見成績與總結詳解。本站提示廣大學習愛好者:(解析SQLite中的罕見成績與總結詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是解析SQLite中的罕見成績與總結詳解正文


1、 創立數據
假如不往數據庫外面添加任何的表,這個數據庫等於沒有樹立,不會在硬盤上發生任何文件,假如數據庫曾經存在,則會翻開這個數據庫。

2、 若何經由過程sqlite3.dll與sqlite3.def生成sqlite3.lib文件
LIB /DEF:sqlite3.def /machine:IX86

3、 sqlite3_open翻開一個數據庫時,假如數據庫不存在就會重生成一個數據庫文件。假如接著履行其他查詢語句就會掉敗,好比sqlite3_prepare,編程中湧現明明指定了數據庫並且外面也稀有據,為何查詢掉敗了,重要是數據庫名途徑纰謬惹起的。普通的做法是先檢討數據庫文件能否存在,假如存在就應用sqlite3_open翻開數據庫;不然創立一個新的數據庫。

4、 若何樹立主動增加字段
聲明為INTEGER PRIMARY KEY的列將會主動增加。

5、SQLite3支撐何種數據類型?
NULL
INTEGER
REAL
TEXT
BLOB
但現實上,sqlite3也接收以下的數據類型:
smallint 16位元的整數。
interger 32位元的整數。
decimal(p,s) p准確值和s年夜小的十進位整數,准確值p是指全體有幾個數(digits)年夜小值,s是指小數點後有幾位數。假如沒有特殊指定,則體系會設為p=5; s=0。
float 32位元的實數。
double 64位元的實數。
char(n) n長度的字串,n不克不及跨越254。
varchar(n)長度不固定且其最年夜長度為n的字串,n不克不及跨越4000。
graphic(n)和char(n)一樣,不外其單元是兩個字元double-bytes,n不克不及跨越127。這個形狀是為了增援兩個字元長度的字體,例如中文字。
vargraphic(n)可變長度且其最年夜長度為n的雙字元字串,n不克不及跨越2000。
date包括了年份、月份、日期。
time包括了小時、分鐘、秒。
timestamp包括了年、月、日、時、分、秒、千分之一秒。

6、SQLite許可向一個integer型字段中拔出字符串
這是一個特征,而不是一個bug。SQLite不強迫數據類型束縛。任何數據都可以拔出任何列。你可以向一個整型列中拔出隨意率性長度的字符串,向布爾型列中拔出浮點數,或許向字符型列中拔出日期型值。在CREATE TABLE中所指定的數據類型不會限制在該列中拔出任何數據。任何列都可接收隨意率性長度的字符串(只要一種情形除外:標記為INTEGER PRIMARY KEY的列只能存儲64位整數,當向這類列中插數據除整數之外的數據時,將會發生毛病。

但SQLite確切應用聲明的列類型來指導你所希冀的格局。所以,例如你向一個整型列中拔出字符串時,SQLite會試圖將該字符串轉換成一個整數。假如可以轉換,它將拔出該整數;不然,將拔出字符串。這類特征有時被稱為類型或列親和性(type or column affinity).

7、為何SQLite不許可在統一個表分歧的兩行上應用0和0.0作主鍵?
主鍵必需是數值類型,將主鍵改成TEXT型將不起感化。
每行必需有一個獨一的主鍵。關於一個數值型列,SQLite以為'0'和'0.0'是雷同的,由於他們在作為整數比擬時是相等的(拜見上一成績)。所以,如許值就不惟一了。

8、多個運用法式或一個運用法式的多個實例可以同時拜訪統一個數據庫文件嗎?
 
多個過程可同時翻開統一個數據庫。多個過程可以同時停止SELECT操作,但在任一時辰,只能有一個過程對數據庫停止更改。
 
SQLite應用讀、寫鎖掌握對數據庫的拜訪。(在Win95/98/ME等不支撐讀、寫鎖的體系下,應用一個幾率性的模仿來取代。)但應用時要留意:假如數據庫文件寄存於一個NFS文件體系上,這類鎖機制能夠不克不及正常任務。這是由於fcntl()文件鎖在許多NFS上沒有准確的完成。在能夠有多個過程同時拜訪數據庫的時刻,應當防止將數據庫文件放到NFS上。在Windows上,Microsoft的文檔中說:假如應用FAT文件體系而沒有運轉share.exe守護過程,那末鎖能夠是不克不及正常應用的。那些在Windows上有許多經歷的人告知我:關於收集文件,文件鎖的完成有很多多少Bug,是靠不住的。假如他們說的是對的,那末在兩台或多台Windows機械間同享數據庫能夠會惹起不希冀的成績。

我們認識到,沒有其它嵌入式的SQL數據庫引擎能象SQLite如許處置如斯多的並發。SQLite許可多個過程同時翻開一個數據庫,同時讀一個數據庫。當有任何過程想要寫時,它必需在更新進程中鎖住數據庫文件。但那平日只是幾毫秒的時光。其它過程只需期待寫過程干完活扣束。典范地,其它嵌入式的SQL數據庫引擎同時只許可一個過程銜接到數據庫。

然則,Client/Server數據庫引擎(如PostgreSQL, MySQL,或Oracle)平日支撐更高等其余並發,而且許可多個過程同時寫統一個數據庫。這類機制在Client/Server構造的數據庫上是能夠的,由於老是有一個單一的辦事器過程很好地掌握、調和對數據庫的拜訪。假如你的運用法式須要許多的並發,那末你應當斟酌應用一個Client/Server構造的數據庫。但經歷注解,許多運用法式須要的並發,常常比其設計者所想象的少很多。

當SQLite試圖拜訪一個被其它過程鎖住的文件時,缺省的行動是前往SQLITE_BUSY。可以在C代碼中應用sqlite3_busy_handler()或sqlite3_busy_timeout() API函數調劑這一行動。

9、SQLite線程平安嗎?
線程是魔鬼(Threads are evil)。防止應用它們。
SQLite是線程平安的。因為許多用戶會疏忽我們在上一段中給出的建議,我們做出了這類妥協。然則,為了到達線程平安,SQLite在編譯時必需將SQLITE_THREADSAFE預處置宏置為1。在Windows和Linux上,已編譯的好的二進制刊行版中都是如許設置的。假如不肯定你所應用的庫能否是線程平安的,可以挪用sqlite3_threadsafe()接口找出。

10、在SQLite數據庫中若何列出一切的表和索引?
假如你運轉sqlite3敕令行來拜訪你的數據庫,可以鍵入“.tables”來取得一切表的列表。或許,你可以輸出“.schema”來看全部數據庫形式,包含一切的表的索引。輸出這些敕令,前面跟一個LIKE形式婚配可以限制顯示的表。

11、SQLite數據庫有已知的年夜小限制嗎?
在Windows和Unix下,版本2.7.4的SQLite可以到達2的41次方字節(2T字節)。老版本的為2的31次方字節(2G字節)。
SQLite版本2.8限制一個記載的容量為1M。SQLite版本3.0則對單個記載容量沒無限制。
表名、索引表名、視圖名、觸發器名和字段名沒有長度限制。但SQL函數的稱號(由sqlite3_create_function() API函數創立)不得跨越255個字符。

12、在SQLite中,VARCHAR字段最長是若干?
SQLite不強迫VARCHAR的長度。你可以在SQLITE中聲明一個VARCHAR(10),SQLite照樣可以很愉快地許可你放入500個字符。而且這500個字符是原封不動的,它永久不會被截斷。
 
13、在SQLite中,若何在一個表上添加或刪除一列?
SQLite有無限地ALTER TABLE支撐。你可使用它來在表的末尾增長一列,可更改表的稱號。假如須要對表構造做更龐雜的轉變,則必需從新建表。重建時可以先將已存在的數據放到一個暫時表中,刪除原表,創立新表,然後將數據從暫時表中復制回來。

如,假定有一個t1表,個中有"a", "b", "c"三列,假如要刪除列c,以下進程描寫若何做:

BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,b);
INSERT INTO t1_backup SELECT a,b FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a,b);
INSERT INTO t1 SELECT a,b FROM t1_backup;
DROP TABLE t1_backup;
COMMIT;
14、在SQLite中支撐分頁嗎?
 
SQLite分頁是世界上最簡略的。假如我要去11-20的Account表的數據Select * From Account Limit 9 Offset 10;
以上語句表現從Account表獲得數據,跳過10行,取9行。這個特征足夠讓許多的web中型網站應用這個了。也能夠如許寫 select * from account limit10,9和下面的的後果一樣。這類寫法MySQL也支撐。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved