日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQLite 3 一些基本的使用

發(fā)布時間:2025/3/12 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQLite 3 一些基本的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1)SQL的指令格式
??????????? 所有的SQL指令都是以分號(;)結(jié)尾的。如果遇到兩個減號(--)則代表注解,sqlite3會略過去。
????? 2)建立資料表
??????????? 假設(shè)我們要建一個名叫film的資料表,只要鍵入以下指令就可以了:
????????????????? create table film(title, length, year, starring);
??????????? 這樣我們就建立了一個名叫film的資料表,里面有name、length、year、starring四個字段。
??????????? 這個create table指令的語法為:
????????????????? create table table_name(field1, field2, field3, ...);
??????????? table_name是資料表的名稱,fieldx則是字段的名字。sqlite3與許多SQL數(shù)據(jù)庫軟件不同的是,它不在乎字段屬于哪一種資料型態(tài):sqlite3的字段可以儲存任何東西:文字、數(shù)字、大量文字(blub),它會在適時自動轉(zhuǎn)換。
????? 3)建立索引
??????????? 如果資料表有相當(dāng)多的資料,我們便會建立索引來加快速度。好比說:
????????????????? create index film_title_index on film(title);
??????????? 意思是針對film資料表的name字段,建立一個名叫film_name_index的索引。這個指令的語法為
????????????????? create index index_name on table_name(field_to_be_indexed);
??????????? 一旦建立了索引,sqlite3會在針對該字段作查詢時,自動使用該索引。這一切的操作都是在幕后自動發(fā)生的,無須使用者特別指令。
????? 4)加入一筆資料
??????????? 接下來我們要加入資料了,加入的方法為使用insert into指令,語法為:
????????????????? insert into table_name values(data1, data2, data3, ...);
??????????? 例如我們可以加入
????????????????? insert into film values ('Silence of the Lambs, The', 118, 1991, 'Jodie Foster');insert into film values ('Contact', 153, 1997, 'Jodie Foster');insert into film values ('Crouching Tiger, Hidden Dragon', 120, 2000, 'Yun-Fat Chow');insert into film values ('Hours, The', 114, 2002, 'Nicole Kidman');
??????????? 如果該字段沒有資料,我們可以填NULL。
????? 5)查詢資料
??????????? 講到這里,我們終于要開始介紹SQL最強(qiáng)大的select指令了。我們首先簡單介紹select的基本句型:
????????????????? select columns from table_name where expression;
??????????? 最常見的用法,當(dāng)然是倒出所有數(shù)據(jù)庫的內(nèi)容:
????????????????? select * from film;
??????????? 如果資料太多了,我們或許會想限制筆數(shù):
????????????????? select * from film limit 10;
??????????? 或是照著電影年份來排列:
????????????????? select * from film order by year limit 10;
??????????? 或是年份比較近的電影先列出來:
????????????????? select * from film order by year desc limit 10;
??????????? 或是我們只想看電影名稱跟年份:
????????????????? select title, year from film order by year desc limit 10;
??????????? 查所有茱蒂佛斯特演過的電影:
????????????????? select * from film where starring='Jodie Foster';
??????????? 查所有演員名字開頭叫茱蒂的電影('%' 符號便是 SQL 的萬用字符):
????????????????? select * from film where starring like 'Jodie%';
??????????? 查所有演員名字以茱蒂開頭、年份晚于1985年、年份晚的優(yōu)先列出、最多十筆,只列出電影名稱和年份:
????????????????? select title, year from film where starring like 'Jodie%' and year >= 1985 order by year desc limit 10;
??????????? 有時候我們只想知道數(shù)據(jù)庫一共有多少筆資料:
????????????????? select count(*) from film;
??????????? 有時候我們只想知道1985年以后的電影有幾部:
????????????????? select count(*) from film where year >= 1985;
??????????? (進(jìn)一步的各種組合,要去看SQL專書,不過你大概已經(jīng)知道SQL為什么這么流行了:這種語言允許你將各種查詢條件組合在一起──而我們還沒提到「跨數(shù)據(jù)庫的聯(lián)合查詢」呢!)?
????? 6)如何更改或刪除資料
??????????? 了解select的用法非常重要,因?yàn)橐趕qlite更改或刪除一筆資料,也是靠同樣的語法。
??????????? 例如有一筆資料的名字打錯了:
????????????????? update film set starring='Jodie Foster' where starring='Jodee Foster';
??????????? 就會把主角字段里,被打成'Jodee Foster'的那筆(或多筆)資料,改回成Jodie Foster。
????????????????? delete from film where year < 1970;
??????????? 就會刪除所有年代早于1970年(不含)的電影了。
????? 7)其他sqlite的特別用法
??????????? sqlite可以在shell底下直接執(zhí)行命令:
????????????????? sqlite3 film.db "select * from film;"
??????????? 輸出 HTML 表格:
????????????????? sqlite3 -html film.db "select * from film;"
??????????? 將數(shù)據(jù)庫「倒出來」:
????????????????? sqlite3 film.db ".dump" > output.sql
??????????? 利用輸出的資料,建立一個一模一樣的數(shù)據(jù)庫(加上以上指令,就是標(biāo)準(zhǔn)的SQL數(shù)據(jù)庫備份了):
????????????????? sqlite3 film.db < output.sql
??????????? 在大量插入資料時,你可能會需要先打這個指令:
????????????????? begin;
??????????? 插入完資料后要記得打這個指令,資料才會寫進(jìn)數(shù)據(jù)庫中:
????????????????? commit;?
???? 8)SQLite3支持?jǐn)?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是指全部有幾個數(shù)(digits)大小值??? ,s是指小數(shù)點(diǎn)後有幾位數(shù)。如果沒有特別指定,則系統(tǒng)會設(shè)為 p=5; s=0 。
????????????????? float?? 32位元的實(shí)數(shù)。
????????????????? double?? 64位元的實(shí)數(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? 包含了 年、月、日、時、分、秒、千分之一秒。
????? 9)SQLite 分頁
??????????? 如果我要去11-20的Account表的數(shù)據(jù)
????????????????? Select * From Account Limit 9 Offset 10;
??????????? 以上語句表示從Account表獲取數(shù)據(jù),跳過10行,取9行
??????????? 嗯,我覺得這個特性足夠讓很多的web中型網(wǎng)站使用這個了。
??????????? 也可以這樣寫 select * from account limit10,9和上面的的效果一樣。
??????????? 這種寫法MySQL也支持。
????? 10)SQLite 建立自動增長字段
??????????? 簡短回答:聲明為 INTEGER PRIMARY KEY 的列將會自動增長。
??????????? 長一點(diǎn)的答案: 如果你聲明表的一列為 INTEGER PRIMARY KEY,那么, 每當(dāng)你在該列上插入一NULL值時, NULL自動被轉(zhuǎn)換為一個比該列中最大值大1的一個整數(shù),如果表是空的, 將會是1。 (如果是最大可能的主鍵 9223372036854775807,那個,將鍵值將是隨機(jī)未使用的數(shù)。) 如,有下列表:
????????????????? CREATE TABLE t1(
??????????????????????? a INTEGER PRIMARY KEY,
??????????????????????? b INTEGER
????????????????? );
??????????? 在該表上,下列語句
????????????????? INSERT INTO t1 VALUES(NULL,123);
??????????? 在邏輯上等價于:
????????????????? INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123);
??????????? 有一個新的API叫做 sqlite3_last_insert_rowid(), 它將返回最近插入的整數(shù)值。
??????????? 注意該整數(shù)會比表中該列上的插入之前的最大值大1。 該鍵值在當(dāng)前的表中是唯一的。但有可能與已從表中刪除的值重疊。要想建立在整個表的生命周期中唯一的鍵值,需要在 INTEGER PRIMARY KEY 上增加AUTOINCREMENT聲明。那么,新的鍵值將會比該表中曾能存在過的最大值大1。如果最大可能的整數(shù)值在數(shù)據(jù)表中曾經(jīng)存在過,INSERT將 會失敗, 并返回SQLITE_FULL錯誤代碼。
????? 11)SQLite內(nèi)建函數(shù)表
??????????? 算術(shù)函數(shù)
????????????????? abs(X)
??????????????????????? 返回給定數(shù)字表達(dá)式的絕對值。
????????????????? max(X,Y[,...])
??????????????????????? 返回表達(dá)式的最大值。
????????????????? min(X,Y[,...])
??????????????????????? 返回表達(dá)式的最小值。
????????????????? random(*)
??????????????????????? 返回隨機(jī)數(shù)。
????????????????? round(X[,Y])
??????????????????????? 返回數(shù)字表達(dá)式并四舍五入為指定的長度或精度。
??????????? 字符處理函數(shù)
????????????????? length(X)
??????????????????????? 返回給定字符串表達(dá)式的字符個數(shù)。
????????????????? lower(X)
??????????????????????? 將大寫字符數(shù)據(jù)轉(zhuǎn)換為小寫字符數(shù)據(jù)后返回字符表達(dá)式。
????????????????? upper(X)
??????????????????????? 返回將小寫字符數(shù)據(jù)轉(zhuǎn)換為大寫的字符表達(dá)式。
????????????????? substr(X,Y,Z)
??????????????????????? 返回表達(dá)式的一部分。
????????????????? randstr()
????????????????? quote(A)
????????????????? like(A,B)
??????????????????????? 確定給定的字符串是否與指定的模式匹配。
????????????????? glob(A,B)?
??????????? 條件判斷函數(shù)
????????????????? coalesce(X,Y[,...])
????????????????? ifnull(X,Y)
????????????????? nullif(X,Y)
??????????? 集合函數(shù)
????????????????? avg(X)
??????????????????????? 返回組中值的平均值。
????????????????? count(X)
??????????????????????? 返回組中項目的數(shù)量。
????????????????? max(X)
??????????????????????? 返回組中值的最大值。
????????????????? min(X)
??????????????????????? 返回組中值的最小值。
????????????????? sum(X)
??????????????????????? 返回表達(dá)式中所有值的和。
??????????? 其他函數(shù)
????????????????? typeof(X)
??????????????????????? 返回數(shù)據(jù)的類型。
????????????????? last_insert_rowid()
??????????????????????? 返回最后插入的數(shù)據(jù)的ID。
????????????????? sqlite_version(*)
??????????????????????? 返回SQLite的版本。
????????????????? change_count()
??????????????????????? 返回受上一語句影響的行數(shù)。
????????????????? last_statement_change_count()
????????????????? |xGv00|fcc8d4de8197f69fde70263fb4d52380
5、SQLite 學(xué)習(xí)筆記
????? (1)創(chuàng)建數(shù)據(jù)庫
??????????? 在命令行中切換到sqlite.exe所在的文件夾
??????????? 在命令中鍵入sqlite3 test.db;即可創(chuàng)建了一個名為test.db的數(shù)據(jù)庫
??????????? 由于此時的數(shù)據(jù)庫中沒有任何表及數(shù)據(jù)存在,這時候是看不到test.db的,必須往里面插入一張表即可看到數(shù)據(jù)庫
????? (2)創(chuàng)建表
????????????????? create table Test(Id Integer primary key, value text);
??????????? 此時即可完成表的創(chuàng)建,當(dāng)把主鍵設(shè)為Integer時,則該主鍵為自動增長,插入數(shù)據(jù)時,可直接使用如下語句:
????????????????? insert into Test values(null,'Acuzio');
????? (3)獲取最后一次插入的主鍵
????????????????? select last_insert_rowid();
????? (4)顯示行數(shù)和頭
??????????? sqlite>.mode col
??????????? sqlite>.headers on
??????????? 在數(shù)據(jù)庫查詢的時候,顯示行數(shù)和頭!
????? (5)在DOS中,鍵入Ctrl+C,退出數(shù)據(jù)庫,Unix中,使用Ctrl+D
????? (6)SQLite Master Table Schema
??????????? -----------------------------------------------------------------
??????????? Name?????????????????????? Description
??????????? -----------------------------------------------------------------
??????????? type????????? The object’s type (table, index, view, trigger)
??????????? name????????? The object’s name
??????????? tbl_name????? The table the object is associated with
??????????? rootpage????? The object’s root page index in the database (where it begins)
??????????? sql?????????? The object’s SQL definition (DDL)
??????????? eg.
??????????? sqlite> .mode col
??????????? sqlite> .headers on
??????????? sqlite> select type, name, tbl_name, sql from sqlite_master order by type;
??????????? 這樣就能看到所有數(shù)據(jù)庫中的信息,表、索引、視圖等等
????? (7)導(dǎo)出數(shù)據(jù)
??????????? .output [filename],導(dǎo)出到文件中,如果該文件不存在,則自動創(chuàng)建
??????????? .dump 導(dǎo)出數(shù)據(jù)命令
??????????? .output stdout 返回輸出到屏幕(進(jìn)行其他操作)
??????????? eg.
??????????? sqlite>.output Acuzio.sql
??????????? sqlite>.dump
??????????? sqlite>.output stdout
??????????? 這樣就可以把數(shù)據(jù)導(dǎo)入到Acuzio.sql中
????? (8)導(dǎo)入數(shù)據(jù)
??????????? 導(dǎo)入數(shù)據(jù)使用.read命令
??????????? eg.
??????????? 如導(dǎo)入(7)中的數(shù)據(jù)
??????????? sqlite>.read Acuio.sql
????? (9)備份數(shù)據(jù)庫
??????????? 在切換到Sqlite文件夾
????????????????? sqlite3 test.db .dump > test.sql
??????????? 如果在數(shù)據(jù)庫中
????????????????? sqlite> .output file.sql
????????????????? sqlite> .dump
????????????????? sqlite> .exit
????? (10)導(dǎo)入數(shù)據(jù)庫
??????????? 在切換到Sqlite文件夾
??????????? sqlite3 test.db < test.sql
????? (11)備份二進(jìn)制格式數(shù)據(jù)庫
??????????? vacuum:釋放掉已經(jīng)被刪除的空間(數(shù)據(jù)和表等被刪除,不會被清空空間)
??????????? sqlite3 test.db VACUUM
??????????? cp test.db test.backup
????? (12)獲取數(shù)據(jù)庫信息
??????????? 如果想獲得物理數(shù)據(jù)庫結(jié)構(gòu)的信息,可以去SQLite網(wǎng)站上下載SQLite Analyzer工具
??????????? 使用: sqlite3_analyzer test.db
???? (13)其他的SQLite工具
??????????? SQLite Database Browser ( http://sqlitebrowser.sourceforge.net/)
??????????? SQLite Control Center ( http://bobmanc.home.comcast.net/sqlitecc.html)
??????????? SQLiteManager ( www.sqlabs.net/sqlitemanager.php)
????? (14)執(zhí)行語句
??????????? SQLite 與其他數(shù)據(jù)庫不同,它是以(;)來執(zhí)行語句,而不是(go).
????? (15)SQLite注釋
??????????? (--)或(/* */)
??????????? eg.
????????????????? -- This is a comment on one line
????????????????? /* This is a comment spanning
????????????????? two lines */
????? (16)創(chuàng)建表結(jié)構(gòu)
??????????? CREATE [TEMP|TEMPORARY] TABLE table_name (column_definitions [, constraints]);
??????????? 關(guān)鍵字TEMP、TEMPORARY表示創(chuàng)建的是臨時表
????? (17)在SQLite中有5種基本類型
??????????? Integer/Real/Text/Blob/Null
????? (18)確保唯一性
??????????? 可以用關(guān)鍵字UNIQUE
??????????? eg.
????????????????? CREATE TABLE contacts ( id INTEGER PRIMARY KEY,
????????????????? name TEXT NOT NULL COLLATE NOCASE,
????????????????? phone TEXT NOT NULL DEFAULT 'UNKNOWN',
????????????????? UNIQUE (name,phone) );
????? (19)修改表
??????????? ALTER TABLE table { RENAME TO name | ADD COLUMN column_def }
??????????? eg.
????????????????? sqlite> ALTER TABLE contacts
????????????????? ADD COLUMN email TEXT NOT NULL DEFAULT '' COLLATE NOCASE;
????????????????? sqlite> .schema contacts
????????????????? CREATE TABLE contacts ( id INTEGER PRIMARY KEY,
????????????????? name TEXT NOT NULL COLLATE NOCASE,
????????????????? phone TEXT NOT NULL DEFAULT 'UNKNOWN',
????????????????? email TEXT NOT NULL DEFAULT '' COLLATE NOCASE,
????????????????? UNIQUE (name,phone) );
???? (20)查詢
??????????? SELECT DISTINCT heading FROM tables WHERE predicate
??????????? GROUP BY columns HAVING predicate
??????????? ORDER BY columns LIMIT count,offset;
????? (21)Limit和Offset關(guān)鍵字
??????????? Limit 指返回記錄的最大行數(shù)
??????????? Offset 指跳過多少行數(shù)據(jù)
???? (22)連接
????????????????? SELECT heading FROM LEFT_TABLE join_type RIGHT_TABLE ON join_condition;
??????????? eg.
????????????????? SELECT * FROM A INNER JOIN B ON A.a=B.a;
????????????????? SELECT * FROM A LEFT JOIN B ON A.a=B.a;
????????????????? SELECT * FROM A NATURAL JOIN B ON A;
????????????????? SELECT * FROM A CROSS JOIN B ON A;
????????????????? Remark:當(dāng)連接條件建立在相同名字的行上,我們可以簡單的用關(guān)鍵字(using)
??????????? eg.
????????????????? SELECT * FROM A INNER JOIN B USING(a);
????? (23)別名(AS)
??????????? eg.
????????????????? SELECT f.name, t.name FROM foods f, food_types t
????????????????? WHERE f.type_id=t.id LIMIT 10;
????????????????? SELECT e.name AS Episode, COUNT(f.id) AS Foods
????????????????? FROM foods f
????????????????? JOIN foods_episodes fe on f.id=fe.food_id
????????????????? JOIN episodes e on fe.episode_id=e.id
????????????????? GROUP BY e.id
????????????????? ORDER BY Foods DESC
????????????????? LIMIT 10;
????? (24)子查詢(IN)
??????????? SELECT COUNT(*) FROM foods WHERE type_id
??????????? IN (SELECT id FROM food_types WHERE name='Bakery' OR name='Cereal');
????? (25)混合查詢
??????????? 關(guān)鍵字:UNION, INTERSECT, EXCEPT
??????????? 混合查詢必須滿足以下條件:
????????????????? --關(guān)系結(jié)果必須有相同的行數(shù)
????????????????? --混合查詢只能使用一個order by
??????????? eg.
????????????????? SELECT f.* FROM foods f
????????????????? INNER JOIN
????????????????? (SELECT food_id, count(food_id) as count FROM foods_episodes
????????????????? GROUP BY food_id
????????????????? ORDER BY count(food_id) DESC LIMIT 10) top_foods
????????????????? ON f.id=top_foods.food_id
????????????????? INTERSECT
????????????????? SELECT f.* FROM foods f
????????????????? INNER JOIN foods_episodes fe ON f.id = fe.food_id
????????????????? INNER JOIN episodes e ON fe.episode_id = e.id
????????????????? WHERE e.season BETWEEN 3 and 5
????????????????? ORDER BY f.name;
????? (26)更新數(shù)據(jù)
??????????? 插入數(shù)據(jù)
????????????????? (insert)INSERT INTO table (column_list) VALUES (value_list);
??????????? insert語句用于單表操作,他能在同一時刻插入一條或多條數(shù)據(jù)
??????????? 更新數(shù)據(jù)
????????????????? (update)UPDATE table SET update_list WHERE predicate;
??????????? 更新操作不能用于約束條件為唯一的字段
??????????? 刪除數(shù)據(jù)
????????????????? (delete)DELETE FROM table WHERE predicate;
????? (27)查看表的詳細(xì)信息
??????????? .schema
??????????? eg.
????????????????? .schema User (User為表)
????? (28)SQLite內(nèi)建3種比較方式(通過COLLATE關(guān)鍵字進(jìn)行定義這一行的比較方式)
??????????? BINARY(默認(rèn)),他通過使用C函數(shù)--memcmp(),一個字節(jié)一個字節(jié)的進(jìn)行比較
??????????? 這種方式很好的適用于西方的語言,如English
??????????? NOCASE,是在英語中通過26個ASCII字符進(jìn)行比較的?
??????????? eg.'JERRY'和'Jerry'被認(rèn)為是一樣的
??????????? REVERSE,更多的用于測試!
??????????? eg.
????????????????? CREATE TABLE [User] (
????????????????? [id] VARCHAR(40) DEFAULT '' PRIMARY KEY,
????????????????? [usrName] VARCHAR(50) COLLATE NOCASE DEFAULT '',
????????????????? [usrPwd] VARCHAR(50) DEFAULT '',)?
????? (29)SQLite有5中原始的數(shù)據(jù)類型
????????????????? Integer/Real/Text/Blob/Null
????? (30)typeof()函數(shù)將返回一個他代表的存儲類型(SQLite支持的)
????? (31)事務(wù)
??????????? BEGIN…COMMIT/ROLLBACK?
????? (32)SQLite插入有單引號(')的字符串
??????????? 使用雙單引號即可,例如:
????????????????? INSERT INTO xyz VALUES('5 O''clock');
??????????? 插入數(shù)據(jù)庫的是:5 0'clock。?
????? (33)SQLite中的時間日期函數(shù)
??????????? SQLite包含了如下時間/日期函數(shù):
????????????????? datetime().......................產(chǎn)生日期和時間
????????????????? date()...........................產(chǎn)生日期
????????????????? time()...........................產(chǎn)生時間
????????????????? strftime().......................對以上三個函數(shù)產(chǎn)生的日期和時間進(jìn)行格式化
????????????????? datetime()的用法是:datetime(日期/時間,修正符,修正符...)
????????????????? date()和time()的語法與datetime()相同。
??????????? 在時間/日期函數(shù)里可以使用如下格式的字符串作為參數(shù):
????????????????? YYYY-MM-DD
????????????????? YYYY-MM-DD HH:MM
????????????????? YYYY-MM-DD HH:MM:SS
????????????????? YYYY-MM-DD HH:MM:SS.SSS
????????????????? HH:MM
????????????????? HH:MM:SS
????????????????? HH:MM:SS.SSS
????????????????? now
????????????????? 其中now是產(chǎn)生現(xiàn)在的時間。
??????????? 舉例(寫這個筆記的時間是2006年10月17日晚8點(diǎn)到10點(diǎn),測試環(huán)境:SQLite 2.8.17,WinXP,北京時間):
??????????? 例1.
????????????????? select datetime('now');
????????????????? 結(jié)果:2006-10-17 12:55:54
??????????? 例2.
????????????????? select datetime('2006-10-17');
????????????????? 結(jié)果:2006-10-17 12:00:00
??????????? 例3.
????????????????? select datetime('2006-10-17 00:20:00','+1 hour','-12 minute');
????????????????? 結(jié)果:2006-10-17 01:08:00
??????????? 例4.
????????????????? select date('2006-10-17','+1 day','+1 year');
????????????????? 結(jié)果:2007-10-18
??????????? 例5.
????????????????? select datetime('now','start of year');
????????????????? 結(jié)果:2006-01-01 00:00:00
??????????? 例6.
????????????????? select datetime('now','start of month');
????????????????? 結(jié)果:2006-10-01 00:00:00
??????????? 例7.
????????????????? select datetime('now','start of day');
????????????????? 結(jié)果:2006-10-17 00:00:00
??????????? 例8.
????????????????? select datetime('now','+10 hour','start of day','+10 hour');
????????????????? 結(jié)果:2006-10-17 10:00:00
??????????? 例9.
????????????????? select datetime('now','localtime');
????????????????? 結(jié)果:2006-10-17 21:21:47
??????????? 例10.
????????????????? select datetime('now','+8 hour');
????????????????? 結(jié)果:2006-10-17 21:24:45
??????????? 例3中的+1 hour和-12 minute表示可以在基本時間上(datetime函數(shù)的第一個參數(shù))增加或減少一定時間。
??????????? 例5中的start of year表示一年開始的時間。
??????????? 從例8可以看出,盡管第2個參數(shù)加上了10個小時,但是卻被第3個參數(shù)“start of day”把時間歸零到00:00:00,隨后的第4個參數(shù)在00:00:00 的基礎(chǔ)上把時間增加了10個小時變成了10:00:00。
??????????? 例9把格林威治時區(qū)轉(zhuǎn)換成本地時區(qū)。
??????????? 例10把格林威治時區(qū)轉(zhuǎn)換成東八區(qū)。
??????????? strftime()函數(shù)可以把YYYY-MM-DD HH:MM:SS格式的日期字符串轉(zhuǎn)換成其它形式的字符串。
??????????? strftime()的語法是strftime(格式, 日期/時間, 修正符, 修正符, ...)
??????????? 它可以用以下的符號對日期和時間進(jìn)行格式化:
????????????????? &percnt;d 月份, 01-31
????????????????? &percnt;f 小數(shù)形式的秒,SS.SSS
????????????????? &percnt;H 小時, 00-23
????????????????? &percnt;j 算出某一天是該年的第幾天,001-366
????????????????? &percnt;m 月份,00-12
????????????????? &percnt;M 分鐘, 00-59
????????????????? &percnt;s 從1970年1月1日到現(xiàn)在的秒數(shù)
????????????????? &percnt;S 秒, 00-59
????????????????? &percnt;w 星期, 0-6 (0是星期天)
????????????????? &percnt;W 算出某一天屬于該年的第幾周, 01-53
????????????????? &percnt;Y 年, YYYY
????????????????? &percnt;&percnt; 百分號
??????????? strftime()的用法舉例如下:
????????????????? 例11用圓點(diǎn)作為日期的分隔附,并把時間轉(zhuǎn)換為當(dāng)?shù)氐臅r區(qū)的時間。
????????????????? select strftime('&percnt;Y.&percnt;m.&percnt;d &percnt;H:&percnt;M:&percnt;S','now','localtime');
????????????????? 結(jié)果:2006.10.17 21:41:09
??????????? 例11用圓點(diǎn)作為日期的分隔附,并把時間轉(zhuǎn)換為當(dāng)?shù)氐臅r區(qū)的時間。?
???? (34)SQLite數(shù)據(jù)庫中刪除數(shù)據(jù),但數(shù)據(jù)庫文件沒有變小
??????????? 當(dāng)你從SQLite數(shù)據(jù)庫中刪除數(shù)據(jù)時, 未用的磁盤空間將會加入一個內(nèi)部的“自由列表”中。 當(dāng)你下次插入數(shù)據(jù)時,這部分空間可以重用。磁盤空間不會丟失, 但也不會返還給操作系統(tǒng)。
??????????? 如果刪除了大量數(shù)據(jù),而又想縮小數(shù)據(jù)庫文件占用的空間,執(zhí)行 VACUUM 命令。 VACUUM 將會從頭重新組織數(shù)據(jù)庫。這將會使用數(shù)據(jù)庫有一個空的“自由鏈表”, 數(shù)據(jù)庫文件也會最小。但要注意的是,VACUUM 的執(zhí)行會需要一些時間(在SQLite開發(fā)時,在Linux上,大約每M字節(jié)需要半秒種),并且, 執(zhí)行過程中需要原數(shù)據(jù)庫文件至多兩倍的臨時磁盤空間。
??????????? 對于 SQLite 3.1版本,一個 auto-vacumm 模式可以替代 VACUUM 命令。 可以使用 auto_vacuum pragma 打開。
??????????? C#里面實(shí)現(xiàn)是:
????????????????? mycon = new SQLiteConnection("Data Source=test.db3;Version=3;New=True;");
????????????????? mycon.Open();
????????????????? SQLiteCommand com = mycon.CreateCommand();
????????????????? com.CommandText = "vacuum";
????????????????? com.ExecuteNonQuery();

總結(jié)

以上是生活随笔為你收集整理的SQLite 3 一些基本的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。