SQLite(快速上手版)筆記

1. SQL語法關鍵字

關鍵字

描述

Create Table

創建數據表

Alter Table

修改數據表

Drop Table

刪除數據表

Create Index

創建索引

Drop Index

刪除索引

Create Trigger

創建觸發器

Drop Trigger

刪除觸發器

Create View

創建視圖

Drop View

刪除視圖

Insert

插入數據

Delete

刪除數據

Update

更新數據

Select

查詢數據

Begin

啓動事務

Commit

提交事務

Rollback

回滾事務

 

2. SQL數據類型

  2.1. 本地類型--5種基本類型

數據名稱

說明

INTEGER

整數值是全數字(包括正和負)。整數可以是1, 2, 3, 4, 6或 8字節。整數的最大範圍(8 bytes)是{-9223372036854775808, 0, +9223372036854775807}。SQLite根據數字的值自動控制整數所佔的字節數。

空注:參可變長整數的概念。

REAL

實數是10進制的數值。SQLite使用8字節的符點數來存儲實數。

TEXT

文本(TEXT)是字符數據。SQLite支持幾種字符編碼,包括UTF-8和UTF-16。字符串的大小沒有限制。

BLOB

二進制大對象(BLOB)是任意類型的數據。BLOB的大小沒有限制。

NULL

NULL表示沒有值。SQLite具有對NULL的完全支持。

 

  SQLite通過值的表示法來判斷其類型,下面就是SQLite的推理方法:

  l SQL語句中用單引號或雙引號括起來的文字被指派爲TEXT。

  l 如果文字是未用引號括起來的數據,並且沒有小數點和指數,被指派爲INTEGER。

  l 如果文字是未用引號括起來的數據,並且帶有小數點或指數,被指派爲REAL。

  l 用NULL說明的值被指派爲NULL存儲類。

  l 如果一個值的格式爲X'ABCD',其中ABCD爲16進制數字,則該值被指派爲BLOB。X前綴大小寫皆可。

 

  2.2. 兼容的SQL92類型

數據類型

類型描述

對應類型

integer(size) 

int(size) 

smallint(size) 

tinyint(size)

僅容納整數。在括號內規定數字的最大位數。

INTEGER

decimal(size,d) 

numeric(size,d)

容納帶有小數的數字。

"size" 規定數字的最大位數。"d" 規定小數點右側的最多位數。

REAL

char(size)

容納固定長度的字符串(可容納字母、數字以及特殊字符)。

在括號中規定字符串的長度。

TEXT

varchar(size)

容納可變長度的字符串(可容納字母、數字以及特殊的字符)。

在括號中規定字符串的最大長度。

TEXT

date(yyyymmdd)

容納日期。

TEXT

 

3. 表-Table

  3.1. Create Table

    3.1.1. 語法格式

CREATE TABLE [數據庫名.]表名(

字段名稱1 字段類型 字段約束,

字段名稱2 字段類型 字段約束,

字段名稱3 字段類型 字段約束,

字段名稱4 字段類型 字段約束,

… …

分組約束1,

分組約束2,

… …

);

    3.1.2. 字段約束

約束名稱

約束說明

NOT NULL

非空,約束強制列不接受 NULL 值,約束強制字段始終包含值。這意味着,如果不向字段添加值,就無法插入新紀錄或者更新記錄。

PRIMARY KEY

主鍵,約束唯一標識數據庫表中的每條記錄。

主鍵必須包含唯一的值。

主鍵列不能包含 NULL 值。

每個表應該都一個主鍵,並且每個表只能有一個主鍵。

FOREIGN KEY

外鍵,約束本字段的值必須存在於另一個表中主鍵字段,

當使用外鍵約束時,如果外鍵在其所依賴的表中不存在,則記錄插入失敗。

UNIQUE

唯一性,約束唯一標識數據庫表中的每條記錄,即插入的字段值不可重複,唯一性約束可以包含NULL值,但每張表也只能有一個記錄爲NULL值。

DEFAULT

默認值,約束字段的默認值,如果插入數據時沒有提供該字段的數值,則會使用默認值進行填充。

    3.1.3. 數據字典

    表名:tbl_goods_category

    描述:商品類別

字段名稱

字段類型

字段長度

字段描述

category_code

CHAR

8

類別編碼

category_name

VARCHAR

128

類別名稱

category_desc

VARCHAR

255

類別描述

 

    表名:tbl_goods_info

    描述:商品信息

字段名稱

字段類型

字段長度

字段描述

category_code

CHAR

8

類別編碼

goods_id

CHAR

16

商品編碼

goods_name

VARCHAR

128

商品名稱

goods_unit

VARCHAR

8

商品單位

prime_cost

NUMBER

(6,2)

進貨價格

sale_price

NUMBER

(6,2)

零售價格

vip_price

NUMBER

(6,2)

會員價格

remark

VARCHAR

255

備註信息

 

    表名:tbl_stock_bill

    描述:商品入庫單

字段名稱

字段類型

字段長度

字段描述

goods_id

CHAR

16

商品編碼

bill_id

CHAR

20

進貨單單號

stock_time

DateTime

 

入庫時間

stock_amount

NUMBER

(6,2)

入庫數量

prime_cost

NUMBER

(6,2)

進貨價格

       

    3.1.4. 腳本示例

    Ø 創建商品類別表tbl_goods_category

--創建商品類別表

--類別編碼爲主鍵

--類別名稱必須具有唯一性

create table tbl_goods_category(

category_code CHAR(8) primary key,  --類別編碼

category_name VARCHAR(128) UNIQUE, --類別名稱

category_desc VARCHAR(255)); --類別描述

 

    Ø 創建商品信息表tbl_goods_info

--創建商品信息表

--商品編碼爲主鍵

--商品名稱必須具有唯一性

create table tbl_goods_info(

category_code CHAR(8) , --類別編碼

goods_id CHAR(16) primary key, --商品編碼

goods_name VARCHAR(128) UNIQUE, --商品名稱

goods_unit VARCHAR(8), --商品單位

prime_cost NUMBER(6,2), --進貨價格

sale_price NUMBER(6,2), --零售價格

vip_price NUMBER(6,2), --會員價格

remark VARCHAR(255),

FOREIGN KEY (category_code)

REFERENCES tbl_goods_category(category_code)); --備註信息

 

      Ø 創建商品入庫單tbl_stock_bill

--創建商品入庫單

--商品編碼和入庫時間爲組合主鍵

create table tbl_stock_bill(

goods_id CHAR(16), --商品編碼

stock_time DateTime, --入庫時間

stock_amount NUMBER(6,2), --入庫數量

prime_cost NUMBER(6,2),  --進貨價格

primary key(goods_id, stock_time),

FOREIGN KEY (goods_id)

REFERENCES tbl_goods_info(goods_id));

 

3.2. Alter Table

    3.2.1. 語法格式

    表重命名

ALTER TABLE [數據庫名.]表名 RENAME TO 新表名

 

    添加字段

ALTER TABLE [數據庫名.]表名 ADD 字段名稱 字段類型 字段約束

 

    3.2.2. 腳本示例

    Ø 創建一個學生信息表tbl_student

create table tbl_student(

        std_id char(20) primary key,

        std_name varchar(16),

std_age integer);

 

    Ø 修改學生信息表名爲tbl_student_info

alter table tbl_student rename tbl_student_info

 

    Ø 爲學生信息表添加班級字段

alter table tbl_student_info add class char(8)

 

3.3. Drop Table

    3.3.1. 語法格式

DROP TABLE [數據庫名.]表名

 

    3.3.2. 腳本示例

    刪除一個名爲tbl_student_info的數據表

DROP TABLE tbl_student_info

 

4. 索引-Index

   4.1. Create Index

    4.1.1. 語法格式

CREATE INDEX [數據庫名.]索引名稱 ON 表名(

字段名稱1 [ASC/DESC],

字段名稱1 [ASC/DESC],

… …);//在相應的表的列字段或多個列字段上建立相應的索引

    4.1.2. 腳本示例

    創建一個名爲tbl_student的學生信息表,併爲該學生信息表創建索引

create table tbl_student(

        std_id char(20) primary key,

        std_name varchar(16),

        std_age integer);

 

--爲學號創建升序索引

create index idx_std_id ON tbl_student(std_id ASC);

 

--爲姓名和年齡創建姓名爲升序,年齡爲降序的索引

create index idx_name_age ON tbl_student(std_name ASC, std_age DESC);

 

  4.2. Drop Index

      4.2.1. 語法格式

DROP INDEX [數據庫名.]索引名

 

      4.2.2. 腳本示例

      刪除一個名爲idx_name_age的索引

DROP INDEX idx_name_age

 

5. 觸發器-Trigger

   5.1. Create Trigger

    5.1.1. 語法格式

CREATE TRIGGER 觸發器名稱

[BEFORE|AFTER] 數據庫事件 ON [數據庫名稱].表名

[FOR EACH ROW][ WHEN expression]

BEGIN

觸發器執行動作

END

 

    數據庫事件:

    DELETE INSERT

    UPDATE

    UPDATE OF 字段列表

 

    5.1.2. 腳本示例

     假設"customers"表存儲了客戶信息,"orders"表存儲了訂單信息,下面的觸發器確保當用戶改變地址時所有的 關聯訂單地址均進行相應改變:

CREATE TRIGGER trg_on_update_customer_address 

AFTER UPDATE OF address ON customers  

BEGIN 

UPDATE orders SET address = new.address WHERE customer_name = old.name; (DML語句)

END; 

 

  5.2. Drop Trigger

    5.2.1. 語法格式

DROP TRIGGER觸發器名稱

 

    5.2.2. 腳本示例

    刪除一個名爲trg_on_update_customer_address的觸發器

DROP TRIGGER trg_on_update_customer_address

 

6. 視圖-View

在 SQL 中,視圖是基於SQL 語句的結果集的可視化的表。

視圖包含行和列,就像一個真實的表。視圖中的字段就是來自一個或多個數據庫中的真實的表中的字段。我們可以向視圖添加SQL 函數、WHERE 以及 JOIN 語句,我們也可以提交數據,就像這些來自於某個單一的表。

   6.1. Create View

    6.1.1. 語法格式

CREATE VIEW [數據庫名稱].視圖名稱 AS Select查詢語句

    註釋:視圖總是顯示最近的數據。每當用戶查詢視圖時,數據庫引擎通過使用 SQL 語句來重建數據。

    6.1.2. 腳本示例

    假設有一個學生數據庫,其中有班級表,還有學生信息表

 

    以學生信息表爲基本,創建一個班級編號WF1103班的學生信息視圖

CREATE VIEW view_student_wf1103 as select * from student where class = ‘WF1103’

 

  6.2. Drop View

    6.2.1. 語法格式

DROP VIEW [數據庫名稱].視圖名稱

 

    6.2.2. 腳本示例

    刪除一個名爲view_student_wf1103的學生信息表

DROP VIEW view_student_wf1103

 

7. 數據操作-Insert,Update,Delete

  7.1. Insert

    7.1.1. 語法格式

INSERT INTO [數據庫名稱].表名 VALUES(記錄內容)//對應表的順序進行添加和加入值

INSERT INTO [數據庫名稱].表名(字段列表) VALUES(對應字段內容)//按字段列表添加值

 

    7.1.2. 腳本示例

create table tbl_student(

        std_id char(20) primary key,

        std_name varchar(16),

        std_age integer);

 

INSERT INTO tbl_student VALUES(‘WF110301’,’張三’,23);

INSERT INTO tbl_student(std_id,std_name,std_age) VALUES(‘WF110301’,’張三’,23);

 

  7.2. Update

    7.2.1. 語法格式

UPDATE [數據庫名稱].表名 SET 字段1=字段1值,字段2=字段2值… where 條件表達式

 

    7.2.2. 腳本示例

UPDATE tbl_student SET std_age=24 where std_id=‘WF110301’

 

  7.3. Delete

    7.3.1. 語法格式

DELETE FROM [數據庫名稱].表名 where 條件表達式

 

    7.3.2. 腳本示例

DELETE FROM tbl_student where std_id=‘WF110301’

 

8. 數據查詢-Select

create table tbl_class(

class_id varchar(8) primary key,

class_name varchar(64),

class_desc varchar(128));

 

create table tbl_student(

class_id varchar(8),

std_id varchar(16) primary key,

std_name varchar(8),

std_age integer,

std_phone varchar(16),

std_school varchar(40));

 

  8.1. 基本查詢

    8.1.1. 語法格式

SELECT [DISTINCT] [*|字段列表] FROM [數據庫名稱].表名

 

    8.1.2. 腳本示例

--查詢學生信息表中的所有信息

Select * from tbl_student

 

--查詢學生信息表中所學生的姓名及年齡的信息

Select std_name, std_age from tbl_student

 

  8.2. Where子句

    Where子句通過條件表達式篩選滿足條件的記錄,條件表達式可以使用SQLite中的各種邏輯運算符號對字段進行篩選。

  Where的操作符

操作符

描述

=

等於

<>

不等於

>

大於

<

小於

>=

大於等於

<=

小於等於

BETWEEN

在某個範圍內

LIKE

搜索某種模式

 

    8.2.1. 語法格式

SELECT [DISTINCT] [*|字段列表]

FROM [數據庫名稱].表名 

WHERE 條件表達式

 

    8.2.2. 腳本示例

--查詢學生信息表中學號等於WF110301的學號

Select * from tbl_student 

where std_id = ‘WF110301’

 

--查詢學生信息表中所年齡大於23的學生

Select * from tbl_student 

where std_age > 23

 

--查詢學生信息表中所有名字中姓‘劉’的學生或着名字最後一個字爲‘剛’的學生

Select * from tbl_student 

where std_name like '劉%' or std_name like '%剛'

 

--查詢學生信息表中農林大學,並且手機號碼中帶有6的學生

Select * from tbl_student 

where std_school = '農林大學' and std_phone like '%6%'

 

  8.3. Group by子句

  GROUP BY子句可以在查詢將指定的字段表數值相同的記錄合併成一條輸出, 它與count(*)函數相結合,可以統計在列表中指字段表數值相同的記錄的條數。

    8.3.1. 語法格式

SELECT [DISTINCT] [*|字段列表] FROM [數據庫名稱].表名 

GROUP BY 字段1,字段2,… …

 

SELECT [*|字段列表] [,count(*) as 新的字段名] FROM [數據庫名稱].表名 

GROUP BY 字段1,字段2,… …

 

    8.3.2. 腳本示例

--統計各個學校的學生數

Select std_school, count(*) as std_count from tbl_student 

group by std_school, std_age

 

  8.4. Order By子句

  ORDER BY子句對所得結果根據表達式排序。

    8.4.1. 語法格式

SELECT [DISTINCT] [*|字段列表] FROM [數據庫名稱].表名 

ORDER BY 字段名1 [ASC/DESC],字段名2 [ASC/DESC],… …

 

    8.4.2. 腳本示例

--查詢學生信息,並按年齡遞減,學號遞增的排序方式顯示

Select * from tbl_student 

order by std_age DESC,std_id ASC

 

  8.5. Limit Offset子句

  LIMIT子句限定行數的最大值。負的LIMIT表示無上限。後跟可選的OFFSET說明跳過結果集中的前多少行,Limit Offset在分頁顯示中十分有用

  8.5.1. 語法格式

SELECT [DISTINCT] [*|字段列表] FROM [數據庫名稱].表名 

Limit 單次最多讀取行數 offset 跳過前面行數

 

SELECT [DISTINCT] [*|字段列表] FROM [數據庫名稱].表名 

Limit跳過前面行數,單次最多讀取行數

 

    8.5.2. 腳本示例

--查詢學生信息,跳過前面10行,獲取5 條記錄

Select * from tbl_student 

Limit 5 offset 10

或 跳過前面10行,獲取5 條記錄

Select * from tbl_student 

Limit 10,5

 

8.6.  多表聯合查詢

  8.6.1. 語法格式

SELECT [DISTINCT] [*|字段列表] FROM [數據庫名稱].表名1, [數據庫名稱].表名2 … 

WHERE 條件表達式       一般的連接

 

  8.6.2. 腳本示例

--查詢學生信息表中所有班級爲WF1103的學生信息,並在結果中輸出班級名稱和學員姓名

Select tbl_class.class_name,tbl_student.std_name from tbl_student, tbl_class

where tbl_student.class_id = tbl_class.class_id

 

8.7. Join子句

  JOIN用於根據兩個或多個表中的列之間的關係,從這些表中查詢數據,JOIN會將兩個表的數據合併起來,輸出具有兩個表有字段的記錄

  JOIN對於兩個表格來說是相乘的關係,(inner join 與join就是普通的連接)

    8.7.1. 語法格式

--在兩個表中存在至少都存在一個能夠滿足條件表達式的匹配時

--INNER JOIN 關鍵字返回行。INNER JOIN 與 JOIN 是相同的。

 

SELECT [DISTINCT] [*|字段列表] FROM [數據庫名稱].左表名… 

INNER JOIN [數據庫名稱].右表名

ON 條件表達式

 

SELECT [DISTINCT] [*|字段列表] FROM [數據庫名稱].左表名… 

JOIN [數據庫名稱].右表名

ON 條件表達式

 

--以左表爲主,當左表有存在滿足條件的記錄時,就會從左表返回所有的行

--即使右表都沒有滿足條件。

SELECT [DISTINCT] [*|字段列表] FROM [數據庫名稱].左表名… 

LEFT JOIN [數據庫名稱].右表名

ON 條件表達式

 

    8.7.2. 腳本示例

  例如,學生信息管理系統中有學生信息和課程兩張表,它們的格式和內容分別如下:

  Tbl_student

 

 

  Tbl_course

 

 

  Ø INNER JOIN示例,查詢班級表中的每一位學生需要學習的課程內容:

Select Tbl_student.class_id, Tbl_student.std_id, Tbl_student.std_name, Tbl_course.course, TBL_course.teacher from Tbl_student 

INNER JOIN Tbl_course ON Tbl_student.class_id = Tbl_course.class_id

 

    注:由於課程表中沒有WF1104班的課程,學生信息表中沒有WF1105班的學生,所以使用INNER JOIN時,只會返回兩個表同時存在的WF1103班中的學生信息

 

 

    Ø LEFT JOIN示例,查詢班級表中的每一位學生需要學習的課程內容:

Select Tbl_student.class_id, Tbl_student.std_id, Tbl_student.std_name, Tbl_course.course, TBL_course.teacher from Tbl_student 

LEFT JOIN Tbl_course ON Tbl_student.class_id = Tbl_course.class_id

 

    注:採用LEFT JOIN無論如何都會返回左表的所有記錄,即使右表中沒有滿足條件的記錄,所以,即使課程表中沒有WF1104班的課程,在左表中的WF1104班的學生信息      仍然會被返回。

 

 

8.8. Union子句

  UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。

請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。(個數和類型相同)

    8.8.1.  語法格式

SELECT [*|字段列表] FROM [數據庫名稱].表名1

UNION

SELECT [*|字段列表] FROM [數據庫名稱].表名2 

 

SELECT [*|字段列表] FROM [數據庫名稱].表名1

UNION ALL

SELECT [*|字段列表] FROM [數據庫名稱].表名2

 

    8.8.2. 腳本示例

 

 

  9. 事務和鎖-Transaction and Lock

  9.1. Begin(事務啓動)

  9.2. Commit(提交)

  9.3. Rollback(回滾)

  9.4. Sqlite  old.db.dump | sqlite3 new.db(這樣可以3<-->2.8)

  9.5. 運算符號

操作符

類型

作用

||

String

Concatenation

*

Arithmetic

Multiply

/

Arithmetic

Divide

%

Arithmetic

Modulus

+

Arithmetic

Add

Arithmetic

Subtract

<<

Bitwise

Right shift

>>

Bitwise

Left shift

&

Logical

And

|

Logical

Or

<

Relational

Less than

<=

Relational

Less than or equal to

>

Relational

Greater than

>=

Relational

Greater than or equal to

=

Relational

Equal to

==

Relational

Equal to

<>

Relational

Not equal to

!=

Relational

Not equal to

IN

Logical

In

AND

Logical

And

OR

Logical

Or

LIKE

Relational

String matching

GLOB

Relational

Filename matching

 

10. 內建函數

SQLite內建函數表 算術函數 abs(X)   返回給定數字表達式的絕對值。 max(X,Y[,...])   返回表達式的最大值。 min(X,Y[,...])   返回表達式的最小值。 random(*)   返回隨機數。 round(X[,Y])   返回數字表達式並四捨五入爲指定的長度或精度。 字符處理函數 length(X)   返回給定字符串表達式的字符個數。 lower(X)   將大寫字符數據轉換爲小寫字符數據後返回字符表達式。 upper(X)   返回將小寫字符數據轉換爲大寫的字符表達式。 substr(X,Y,Z)   返回表達式的一部分。 randstr()   quote(A)   like(A,B)   確定給定的字符串是否與指定的模式匹配。 glob(A,B)   條件判斷函數 coalesce(X,Y[,...])

ifnull(X,Y)

nullif(X,Y)  集合函數 avg(X)   返回組中值的平均值。 count(X)   返回組中項目的數量。 max(X)   返回組中值的最大值。 min(X)   返回組中值的最小值。 sum(X)   返回表達式中所有值的和。 其他函數 typeof(X)   返回數據的類型。 last_insert_rowid()   返回最後插入的數據的ID。 sqlite_version(*)   返回SQLite的版本。 change_count()   返回受上一語句影響的行數。 last_statement_change_count()

================================================================================================================

不需要安裝包,你可以直接去官網下載,現在應該是3.* 的版本吧。http://www.sqlite.org/download.html


如果需要從Sqlite的數據庫直接生成項目工程代碼,可以下載database2Sharp代碼生成工具。
http://www.iqidi.com/database2sharp.htm

原文鏈接:http://www.cnblogs.com/codc-5117/archive/2012/09/06/2672855.html

發佈了139 篇原創文章 · 獲贊 21 · 訪問量 82萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章