天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

php SQLite學(xué)習(xí)筆記與常見問題分析第1/2頁

直到學(xué)會(huì)! 學(xué)之前找資料
SQLite的sql
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE


sqlite常見問題
 (1) 如何建立自動(dòng)增長(zhǎng)字段?

簡(jiǎn)短回答:聲明為 INTEGER PRIMARY KEY 的列將會(huì)自動(dòng)增長(zhǎng)。

長(zhǎng)一點(diǎn)的答案: 如果你聲明表的一列為 INTEGER PRIMARY KEY,那么, 每當(dāng)你在該列上插入一NULL值時(shí), NULL自動(dòng)被轉(zhuǎn)換為一個(gè)比該列中最大值大1的一個(gè)整數(shù),如果表是空的, 將會(huì)是1。 (如果是最大可能的主鍵 9223372036854775807,那個(gè),將鍵值將是隨機(jī)未使用的數(shù)。) 如,有下列表:

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

在該表上,下列語句

INSERT INTO t1 VALUES(NULL,123);

在邏輯上等價(jià)于:

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

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

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


--------------------------------------------------------------------------------

(2)SQLite3支持何種數(shù)據(jù)類型?

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

參見 http://www.sqlite.org/datatype3.html.
--------------------------------------------------------------------------------

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

這是一個(gè)特性,而不是一個(gè)bug。SQLite不強(qiáng)制數(shù)據(jù)類型約束。任何數(shù)據(jù)都可以插入任何列。你可以向一個(gè)整型列中插入任意長(zhǎng)度的字符串,向布爾型列中插入浮點(diǎn)數(shù),或者向字符型列中插入日期型值。 在 CREATE TABLE 中所指定的數(shù)據(jù)類型不會(huì)限制在該列中插入任何數(shù)據(jù)。任何列均可接受任意長(zhǎng)度的字符串(只有一種情況除外: 標(biāo)志為INTEGER PRIMARY KEY的列只能存儲(chǔ)64位整數(shù),當(dāng)向這種列中插數(shù)據(jù)除整數(shù)以外的數(shù)據(jù)時(shí),將會(huì)產(chǎn)生錯(cuò)誤。

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


--------------------------------------------------------------------------------

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

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

每一行必須有一個(gè)唯一的主鍵。對(duì)于一個(gè)數(shù)值型列, SQLite認(rèn)為 '0' 和 '0.0' 是相同的, 因?yàn)樗麄冊(cè)谧鳛檎麛?shù)比較時(shí)是相等的(參見上一問題)。 所以,這樣值就不唯一了。


--------------------------------------------------------------------------------

(5)多個(gè)應(yīng)用程序或一個(gè)應(yīng)用程序的多個(gè)實(shí)例可以同時(shí)訪問同一個(gè)數(shù)據(jù)庫文件嗎?

多個(gè)進(jìn)程可同時(shí)打開同一個(gè)數(shù)據(jù)庫。多個(gè)進(jìn)程可以同時(shí)進(jìn)行SELECT 操作,但在任一時(shí)刻,只能有一個(gè)進(jìn)程對(duì)數(shù)據(jù)庫進(jìn)行更改。

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

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

但是,Client/Server數(shù)據(jù)庫引擎(如 PostgreSQL, MySQL, 或 Oracle)通常支持更高級(jí)別的并發(fā),并且允許多個(gè)進(jìn)程同時(shí)寫同一個(gè)數(shù)據(jù)庫。這種機(jī)制在Client/Server結(jié)構(gòu)的數(shù)據(jù)庫上是可能的,因?yàn)榭偸怯幸粋€(gè)單一的服務(wù)器進(jìn)程很好地控制、協(xié)調(diào)對(duì)數(shù)據(jù)庫的訪問。如果你的應(yīng)用程序需要很多的并發(fā),那么你應(yīng)該考慮使用一個(gè)Client/Server 結(jié)構(gòu)的數(shù)據(jù)庫。但經(jīng)驗(yàn)表明,很多應(yīng)用程序需要的并發(fā),往往比其設(shè)計(jì)者所想象的少得多。

當(dāng)SQLite試圖訪問一個(gè)被其它進(jìn)程鎖住的文件時(shí),缺省的行為是返回 SQLITE_BUSY。 可以在C代碼中使用 sqlite3_busy_handler() 或 sqlite3_busy_timeout() API 函數(shù)調(diào)整這一行為。
---------------------------------------------------------------------------

php技術(shù)php SQLite學(xué)習(xí)筆記與常見問題分析第1/2頁,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 小蝌蚪视频在线观看免费观看WWW | 高清国产激情视频在线观看 | 欧美日韩亚洲成人 | 国产成人mv 在线播放 | wankz tv videos国产| 人妻免费视频公开上传 | 在线观看亚洲AV无码每日更新 | 亚洲嫩草影院久久精品 | 国产免费怕怕免费视频观看 | 在线视频 日韩视频二区 | 男人天堂2018亚洲男人天堂 | 亚洲H成年动漫在线观看不卡 | 国产人妻麻豆蜜桃色69 | 国产三级在线免费 | 寂寞夜晚视频高清观看免费 | 黄色xxxxxx| 99国产精品免费视频 | 两个人的视频免费 | 99久久99久久久精品久久 | 欧美日韩高清一区二区三区 | 久久全国免费观看视频 | 在线观看成人免费 | 女神被调教成了精盆 | 日本一本二本三区免费免费高清 | 做你的爱人BD日本 | 久久精品国产亚洲AV久五月天 | 久久毛片网站 | 日韩做A爰片久久毛片A片毛茸茸 | 俄罗斯美女性生活 | 国产成年人在线观看 | 俄罗斯XBXBXB兽交 | 国产精品无码亚洲网 | 热热久久这里只有精品 | 在线视频久久只有精品第一日韩 | 曰本少妇高潮久久久久久 | 日韩精品久久日日躁夜夜躁影视 | 国产人成精品综合欧美成人 | 野花韩国免费高清电影 | 99久久国产露脸精品竹菊传煤 | 日韩午夜欧美精品一二三四区 | 欧美深深色噜噜狠狠yyy |