成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關于SQLite常見問題解答

移動開發 iOS
本文介紹的是關于SQLite常見問題解答,主要是我們在學習SQLite的時候遇到的一些問題,如何來解決,先來看詳細內容。

關于SQLite常見問題解答是本文要介紹的內容,主要是我們在學習SQLite的時候遇到的一些問題,如何來解決呢,我們一起來看內容。

1、如何建立自動增長字段?

2、SQLite支持何種數據類型?

3、SQLite允許向一個integer型字段中插入字符串!

4、為什么SQLite不允許在同一個表不同的兩行上使用0和0.0作主鍵?

5、多個應用程序或一個應用程序的多個實例可以同時訪問同一個數據庫文件嗎?

(1) 如何建立自動增長字段?

簡短回答:聲明為 INTEGER PRIMARY KEY 的列將會自動增長。

長一點的答案: 如果你聲明表的一列為 INTEGER PRIMARY KEY,那么, 每當你在該列上插入一NULL值時, NULL自動被轉換為一個比該列中***值大1的一個整數,如果表是空的, 將會是1。 (如果是***可能的主鍵 9223372036854775807,那個,將鍵值將是隨機未使用的數。) 如,有下列表:

  1. CREATE TABLE t1( a INTEGER PRIMARY KEY, b INTEGER ); 

在該表上,下列語句

  1. INSERT INTO t1 VALUES(NULL,123); 

在邏輯上等價于:

  1. INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); 

有一個新的API叫做 sqlite3_last_insert_rowid(),它將返回最近插入的整數值。

注意該整數會比表中該列上的插入之前的***值大1。 該鍵值在當前的表中是唯一的。但有可能與已從表中刪除的值重疊。要想建立在整個表的生命周期中唯一的鍵值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT聲明。那么,新的鍵值將會比該表中曾能存在過的***值大1。如果***可能的整數值在數據表中曾經存在過,INSERT將會失敗, 并返回SQLITE_FULL錯誤代碼。

(2)SQLite支持何種數據類型?參見 http://www.sqlite.org/datatype3.html.

(3)SQLite允許向一個integer型字段中插入字符串!

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

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

(4)為什么SQLite不允許在同一個表不同的兩行上使用0和0.0作主鍵?

主鍵必須是數值類型,將主鍵改為TEXT型將不起作用。

每一行必須有一個唯一的主鍵。對于一個數值型列, SQLite認為 '0' 和 '0.0' 是相同的,因為他們在作為整數比較時是相等的(參見上一問題)。 所以,這樣值就不唯一了。

(5)多個應用程序或一個應用程序的多個實例可以同時訪問同一個數據庫文件嗎?

多個進程可同時打開同一個數據庫。多個進程可以同時進行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代碼中使用 sqlite 3_busy_handler() 或 sqlite 3_busy_timeout() API 函數調整這一行為。

小結:關于SQLite常見問題解答的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-07-13 17:57:15

SQLite

2013-05-23 09:49:49

Chrome for google

2009-10-13 14:56:00

CCNA培訓

2010-09-13 14:43:47

無線技術常見問題

2023-10-10 08:01:13

2010-12-27 14:50:16

Windows 部署服

2020-08-20 10:41:28

云計算云安全數據

2010-05-12 17:04:20

BlackBerry開

2011-08-31 16:06:50

LuaWeb開發

2021-02-26 22:54:06

云計算公有云私有云

2010-07-28 11:25:08

Flex滾動條

2013-03-04 13:58:10

2011-05-10 15:30:22

SEO

2017-06-12 15:51:11

數據中心布線運維

2011-07-21 11:19:51

JAVA

2015-06-30 12:39:33

公有云問題解答

2025-03-28 10:19:06

2009-09-02 17:14:12

郵件服務器

2010-08-19 10:44:47

DB2 常見問題

2020-10-16 08:24:40

物聯網網關物聯網IOT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人av免费看 | 欧美精品一区二区三区蜜臀 | 成人一区二区在线 | 国产99免费 | 丁香婷婷在线视频 | 免费小视频在线观看 | 宅男噜噜噜66一区二区 | 日韩一区二区三区精品 | 国产精品久久久久久久久久久免费看 | 成人一区二区在线 | 91电影在线 | 日本免费黄色 | 91久久久久久久久久久 | 亚洲一区二区久久 | 亚洲一区二区国产 | 久久久久久一区 | 国产98色在线 | 日韩 | 欧美中文字幕在线观看 | 中文字幕高清 | 久久久女| 日韩一区中文字幕 | 国产精品日本一区二区在线播放 | 久久一级| 久久久99精品免费观看 | 国产精品久久777777 | 91精品一区二区三区久久久久 | 欧美日韩在线播放 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 亚洲国产成人精品女人久久久 | 羞羞涩涩在线观看 | 欧美一区二区在线 | 精品国产区 | 亚洲综合色视频在线观看 | 亚洲视频免费 | 操操日 | 天天综合久久 | 国产精品久久精品 | 国产午夜在线 | 成人一区二区视频 | 天天久久 | 亚洲一区二区精品视频 |