最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析SQLite中的常見問題與總結詳解

 更新時間:2013年05月16日 15:40:16   作者:  
本篇文章是對SQLite中的常見問題進行了詳細的分析介紹,需要的朋友參考下
1、 創(chuàng)建數(shù)據(jù)
如果不往數(shù)據(jù)庫里面添加任何的表,這個數(shù)據(jù)庫等于沒有建立,不會在硬盤上產生任何文件,如果數(shù)據(jù)庫已經存在,則會打開這個數(shù)據(jù)庫。

2、 如何通過sqlite3.dll與sqlite3.def生成sqlite3.lib文件
LIB /DEF:sqlite3.def /machine:IX86

3、 sqlite3_open打開一個數(shù)據(jù)庫時,如果數(shù)據(jù)庫不存在就會新生成一個數(shù)據(jù)庫文件。如果接著執(zhí)行其他查詢語句就會失敗,比如sqlite3_prepare,編程中出現(xiàn)明明指定了數(shù)據(jù)庫而且里面也有數(shù)據(jù),為什么查詢失敗了,主要是數(shù)據(jù)庫名路徑不對引起的。一般的做法是先檢查數(shù)據(jù)庫文件是否存在,如果存在就使用sqlite3_open打開數(shù)據(jù)庫;否則創(chuàng)建一個新的數(shù)據(jù)庫。

4、 如何建立自動增長字段
聲明為INTEGER PRIMARY KEY的列將會自動增長。

5、SQLite3支持何種數(shù)據(jù)類型?
NULL
INTEGER
REAL
TEXT
BLOB
但實際上,sqlite3也接受如下的數(shù)據(jù)類型:
smallint 16位元的整數(shù)。
interger 32位元的整數(shù)。
decimal(p,s) p精確值和s大小的十進位整數(shù),精確值p是指全部有幾個數(shù)(digits)大小值,s是指小數(shù)點後有幾位數(shù)。如果沒有特別指定,則系統(tǒng)會設為p=5; s=0。
float 32位元的實數(shù)。
double 64位元的實數(shù)。
char(n) n長度的字串,n不能超過254。
varchar(n)長度不固定且其最大長度為n的字串,n不能超過4000。
graphic(n)和char(n)一樣,不過其單位是兩個字元double-bytes,n不能超過127。這個形態(tài)是為了支援兩個字元長度的字體,例如中文字。
vargraphic(n)可變長度且其最大長度為n的雙字元字串,n不能超過2000。
date包含了年份、月份、日期。
time包含了小時、分鐘、秒。
timestamp包含了年、月、日、時、分、秒、千分之一秒。

6、SQLite允許向一個integer型字段中插入字符串
這是一個特性,而不是一個bug。SQLite不強制數(shù)據(jù)類型約束。任何數(shù)據(jù)都可以插入任何列。你可以向一個整型列中插入任意長度的字符串,向布爾型列中插入浮點數(shù),或者向字符型列中插入日期型值。在CREATE TABLE中所指定的數(shù)據(jù)類型不會限制在該列中插入任何數(shù)據(jù)。任何列均可接受任意長度的字符串(只有一種情況除外:標志為INTEGER PRIMARY KEY的列只能存儲64位整數(shù),當向這種列中插數(shù)據(jù)除整數(shù)以外的數(shù)據(jù)時,將會產生錯誤。

但SQLite確實使用聲明的列類型來指示你所期望的格式。所以,例如你向一個整型列中插入字符串時,SQLite會試圖將該字符串轉換成一個整數(shù)。如果可以轉換,它將插入該整數(shù);否則,將插入字符串。這種特性有時被稱為類型或列親和性(type or column affinity).

7、為什么SQLite不允許在同一個表不同的兩行上使用0和0.0作主鍵?
主鍵必須是數(shù)值類型,將主鍵改為TEXT型將不起作用。
每一行必須有一個唯一的主鍵。對于一個數(shù)值型列,SQLite認為'0'和'0.0'是相同的,因為他們在作為整數(shù)比較時是相等的(參見上一問題)。所以,這樣值就不唯一了。

8、多個應用程序或一個應用程序的多個實例可以同時訪問同一個數(shù)據(jù)庫文件嗎?
 
多個進程可同時打開同一個數(shù)據(jù)庫。多個進程可以同時進行SELECT操作,但在任一時刻,只能有一個進程對數(shù)據(jù)庫進行更改。
 
SQLite使用讀、寫鎖控制對數(shù)據(jù)庫的訪問。(在Win95/98/ME等不支持讀、寫鎖的系統(tǒng)下,使用一個概率性的模擬來代替。)但使用時要注意:如果數(shù)據(jù)庫文件存放于一個NFS文件系統(tǒng)上,這種鎖機制可能不能正常工作。這是因為fcntl()文件鎖在很多NFS上沒有正確的實現(xiàn)。在可能有多個進程同時訪問數(shù)據(jù)庫的時候,應該避免將數(shù)據(jù)庫文件放到NFS上。在Windows上,Microsoft的文檔中說:如果使用FAT文件系統(tǒng)而沒有運行share.exe守護進程,那么鎖可能是不能正常使用的。那些在Windows上有很多經驗的人告訴我:對于網絡文件,文件鎖的實現(xiàn)有好多Bug,是靠不住的。如果他們說的是對的,那么在兩臺或多臺Windows機器間共享數(shù)據(jù)庫可能會引起不期望的問題。

我們意識到,沒有其它嵌入式的SQL數(shù)據(jù)庫引擎能象SQLite這樣處理如此多的并發(fā)。SQLite允許多個進程同時打開一個數(shù)據(jù)庫,同時讀一個數(shù)據(jù)庫。當有任何進程想要寫時,它必須在更新過程中鎖住數(shù)據(jù)庫文件。但那通常只是幾毫秒的時間。其它進程只需等待寫進程干完活結束。典型地,其它嵌入式的SQL數(shù)據(jù)庫引擎同時只允許一個進程連接到數(shù)據(jù)庫。

但是,Client/Server數(shù)據(jù)庫引擎(如PostgreSQL, MySQL,或Oracle)通常支持更高級別的并發(fā),并且允許多個進程同時寫同一個數(shù)據(jù)庫。這種機制在Client/Server結構的數(shù)據(jù)庫上是可能的,因為總是有一個單一的服務器進程很好地控制、協(xié)調對數(shù)據(jù)庫的訪問。如果你的應用程序需要很多的并發(fā),那么你應該考慮使用一個Client/Server結構的數(shù)據(jù)庫。但經驗表明,很多應用程序需要的并發(fā),往往比其設計者所想象的少得多。

當SQLite試圖訪問一個被其它進程鎖住的文件時,缺省的行為是返回SQLITE_BUSY。可以在C代碼中使用sqlite3_busy_handler()sqlite3_busy_timeout() API函數(shù)調整這一行為。

9、SQLite線程安全嗎?
線程是魔鬼(Threads are evil)。避免使用它們。
SQLite是線程安全的。由于很多用戶會忽略我們在上一段中給出的建議,我們做出了這種讓步。但是,為了達到線程安全,SQLite在編譯時必須將SQLITE_THREADSAFE預處理宏置為1。在Windows和Linux上,已編譯的好的二進制發(fā)行版中都是這樣設置的。如果不確定你所使用的庫是否是線程安全的,可以調用sqlite3_threadsafe()接口找出。

10、在SQLite數(shù)據(jù)庫中如何列出所有的表和索引?
如果你運行sqlite3命令行來訪問你的數(shù)據(jù)庫,可以鍵入“.tables”來獲得所有表的列表?;蛘撸憧梢暂斎搿?schema”來看整個數(shù)據(jù)庫模式,包括所有的表的索引。輸入這些命令,后面跟一個LIKE模式匹配可以限制顯示的表。

11、SQLite數(shù)據(jù)庫有已知的大小限制嗎?
在Windows和Unix下,版本2.7.4的SQLite可以達到2的41次方字節(jié)(2T字節(jié))。老版本的為2的31次方字節(jié)(2G字節(jié))。
SQLite版本2.8限制一個記錄的容量為1M。SQLite版本3.0則對單個記錄容量沒有限制。
表名、索引表名、視圖名、觸發(fā)器名和字段名沒有長度限制。但SQL函數(shù)的名稱(由sqlite3_create_function() API函數(shù)創(chuàng)建)不得超過255個字符。

12、在SQLite中,VARCHAR字段最長是多少?
SQLite不強制VARCHAR的長度。你可以在SQLITE中聲明一個VARCHAR(10),SQLite還是可以很高興地允許你放入500個字符。并且這500個字符是原封不動的,它永遠不會被截斷。
 
13、在SQLite中,如何在一個表上添加或刪除一列?
SQLite有有限地ALTER TABLE支持。你可以使用它來在表的末尾增加一列,可更改表的名稱。如果需要對表結構做更復雜的改變,則必須重新建表。重建時可以先將已存在的數(shù)據(jù)放到一個臨時表中,刪除原表,創(chuàng)建新表,然后將數(shù)據(jù)從臨時表中復制回來。

如,假設有一個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表的數(shù)據(jù)Select * From Account Limit 9 Offset 10;
以上語句表示從Account表獲取數(shù)據(jù),跳過10行,取9行。這個特性足夠讓很多的web中型網站使用這個了。也可以這樣寫 select * from account limit10,9和上面的的效果一樣。這種寫法MySQL也支持。

相關文章

  • 在centos7下安裝和部署java8和mysql

    在centos7下安裝和部署java8和mysql

    一般學習java和部署項目都是在本地部署,但是生產環(huán)境一般都是在linux環(huán)境下,部署和安裝環(huán)境都是在控制臺下進行操作的,沒有windows的可視化的操作界面,對與linux的命令掌握和操作對小白來說都是一個個挑戰(zhàn),記錄下自己的安裝配置過程
    2017-04-04
  • mysql 5.7.15 安裝配置方法圖文教程

    mysql 5.7.15 安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 5.7.15安裝配置方法圖文教程,感興趣的朋友可以參考一下
    2016-09-09
  • MySQL事務與隔離級別的使用基礎理論

    MySQL事務與隔離級別的使用基礎理論

    這篇文章主要介紹了MySQL事務的隔離級別詳情,事務隔離級別越高,為避免沖突所花費的性能也就越多,即效率低。在“可重復讀”級別,實際上可以解決部分的虛讀問題,但是不能防止update更新產生的虛讀問題,要禁止虛讀產生,還是需要設置串行化隔離級別
    2023-02-02
  • 詳解MySQL?substring()?字符串截取函數(shù)

    詳解MySQL?substring()?字符串截取函數(shù)

    MySQL 查詢數(shù)據(jù)有時候需要對數(shù)據(jù)項進行日期格式化或截取特定部分的操作,當需要對字符串進行截取加工時用到了 substring() 函數(shù),這篇文章主要介紹了MySQL?substring()?字符串截取函數(shù),需要的朋友可以參考下
    2022-07-07
  • MySQL視圖中如何使用IF和CASE語句

    MySQL視圖中如何使用IF和CASE語句

    這篇文章主要介紹了MySQL視圖中如何使用IF和CASE語句問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • mysql查詢結果命令行方式導出/輸出/寫入到文件的3種方法舉例

    mysql查詢結果命令行方式導出/輸出/寫入到文件的3種方法舉例

    這篇文章主要給大家介紹了關于mysql查詢結果命令行方式導出/輸出/寫入到文件的3種方法,?在使用MySQL進行數(shù)據(jù)庫操作的過程中,我們經常需要將查詢結果導出到文件中以備后續(xù)分析和處理,需要的朋友可以參考下
    2023-08-08
  • mysql排序ORDER BY不生效的問題解決

    mysql排序ORDER BY不生效的問題解決

    order by作為一個常用的功能,在項目中應該經常用到,本文主要介紹了mysql排序ORDER BY不生效的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • 開啟bin-log日志mysql報錯的解決方法

    開啟bin-log日志mysql報錯的解決方法

    開啟bin-log日志mysql報錯:This function has none of DETERMINISTIC, NO SQL解決辦法,大家參考使用吧
    2013-12-12
  • 詳解MySQL如何有效的存儲IP地址及字符串IP和數(shù)值之間如何轉換

    詳解MySQL如何有效的存儲IP地址及字符串IP和數(shù)值之間如何轉換

    本文主要介紹了MySQL如何有效的存儲IP地址及字符串IP和數(shù)值之間如何轉換,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • MySQL性能優(yōu)化之Open_Table配置參數(shù)的合理配置建議

    MySQL性能優(yōu)化之Open_Table配置參數(shù)的合理配置建議

    這篇文章主要介紹了MySQL性能優(yōu)化之Open_Table配置參數(shù)的合理配置建議,在MySQL數(shù)據(jù)庫中,Opened_tables表示打開過的表數(shù)量,需要的朋友可以參考下
    2014-07-07

最新評論

瑞安市| 峡江县| 灵台县| 隆尧县| 祁门县| 宿松县| 孟村| 内江市| 探索| 伊川县| 镇平县| 尚志市| 鄢陵县| 岳池县| 宿松县| 焉耆| 武胜县| 商水县| 师宗县| 化隆| 射阳县| 凌云县| 康保县| 绥化市| 洱源县| 诸城市| 昌黎县| 静宁县| 霍城县| 会理县| 金山区| 淮阳县| 贡嘎县| 金川县| 日喀则市| 正定县| 赫章县| 长泰县| 平阴县| 上杭县| 门源|