天天躁日日躁狠狠躁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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 精品免费久久久久久影院 | 久久婷婷五月综合色情 | 蓝男色gay | 99久久久精品免费观看国产 | 久久a在线视频观看 | 欧美高清视频www夜色资源网 | 精品免费久久久久久成人影院 | 最近中文字幕高清中文 | 亚洲日韩视频免费观看 | 色尼玛亚洲综合 | 麻豆国产精品va在线观看约 | 国产欧美日韩综合精品一区二区 | 嗯啊快停下我是你老师啊H 嗯啊快拔出来我是你老师视频 | yellow日本高清在线 | 国产人妻人伦精品1国产 | a一级毛片视频免费看 | 欧美日韩国产高清综合二区 | 一本色道久久综合亚洲精品蜜桃冫 | 亚洲国产精品无码中文在线 | 2022精品福利在线小视频 | 成人1000部免费观看视频 | 久9视频这里只有精品123 | 欧美一区二区视频高清专区 | 亚洲大片免费 | 超碰在线视频 | 国产色婷亚洲99精品AV在线 | 日韩中文欧美在线视频 | 文中字幕一区二区三区视频播放 | 亚洲天堂999 | 亚洲日韩欧美国产中文在线 | 久久无码AV亚洲精品色午夜麻豆 | 纯肉高H啪短文合集 | 无码国产精品高潮久久9 | 国语精彩对白2021 | 国产精品久久欧美一区 | 久久婷婷五月免费综合色啪 | 97精品少妇偷拍蜜桃AV | 国产色无码精品视频国产 | 亚洲国产成人一区二区在线 | 国产麻豆精品传媒AV国产在线 | 国内精品自线在拍2020不卡 |