註冊博客園有一年多了,每次都是來找點資料,從來沒有寫過點什麼,促使我開始寫博客的原因主要有兩點 一是在查找資料的過程中,經常需要重覆的查找某個知識點,一個知識點時間長了之後總是忘記,這樣重覆的過程卻是浪費了大量的時間,把東西記下來一方面是方便自己的查詢,一方面加深自己的理解。 二是提高自己的寫作能力 ...
註冊博客園有一年多了,每次都是來找點資料,從來沒有寫過點什麼,促使我開始寫博客的原因主要有兩點
一是在查找資料的過程中,經常需要重覆的查找某個知識點,一個知識點時間長了之後總是忘記,這樣重覆的過程卻是浪費了大量的時間,把東西記下來一方面是方便自己的查詢,一方面加深自己的理解。
二是提高自己的寫作能力,工作中經常遇到材料的編寫,而自己的文字編寫能力又很一般,有必要做這方面的鍛煉。
沒什麼好說的,進入主題。
1、什麼是SQL和SQLite
SQL(Structured Query Language)是“結構化查詢語言”,它是對關係型資料庫的操作語言。它可以應用到所有關係型資料庫中,例如:MySQL、Oracle、SQL Server等。
SQLite是一個軟體庫,實現了自給自足的、無伺服器的、零配置的、事務性的 SQL 資料庫引擎。SQLite是一個增長最快的資料庫引擎,這是在普及方面的增長,與它的尺寸大小無關。SQLite 源代碼不受版許可權制。
2、SQL和SQLite的語法要求
SQL語句可以單行或多行書寫,以分號結尾;可以用空格和縮進來來增強語句的可讀性;關鍵字不區別大小寫,建議使用小寫;
所有的 SQLite 語句可以以任何關鍵字開始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的語句以分號(;)結束。有個重要的點值得註意,SQLite 是不區分大小寫的,但也有一些命令是大小寫敏感的,比如 GLOB 和 glob 在 SQLite 的語句中有不同的含義
3、SQL語言可以分為四類
DDL(Data Definition Language):數據定義語言,用來定義資料庫對象:庫、表、列等;
DML(Data Manipulation Language):數據操作語言,用來定義資料庫記錄(數據);
DCL(Data Control Language):數據控制語言,用來定義訪問許可權和安全級別;
DQL(Data Query Language):數據查詢語言,用來查詢記錄(數據)。
4、SQL和SQLite數據類型
SQL
int:整型
double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數,即最大值為999.99;
decimal:泛型型,在表單錢方面使用該類型,因為不會出現精度缺失問題;
char:固定長度字元串類型;
varchar:可變長度字元串類型;255
text:字元串類型;
blob:位元組類型;
date:日期類型,格式為:yyyy-MM-dd;
time:時間類型,格式為:hh:mm:ss
timestamp:時間戳類型;yyyy-MM-dd hh:mm:ss
SQLite
NULL:null值
INTEGER:帶符號的整數,根據值得大小存儲在1、2、3、4、6、8個位元組中
REAL:浮點值,存儲為8位元組的IEEE浮點數
TEXT:文本字元串,使用資料庫編碼(UTF-8、UTF-16BE或UTF-16LE)存儲
BLOB:blob數據,完全根據它的輸入存儲
5、下麵詳細介紹SQLite的各種命令
SQLite 命令類似於 SQL。命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP。
創建資料庫:
$sqlite3 DatabaseName.db
創建表:(NOT NULL是一種約束,表示在表中創建紀錄時這些欄位不能為 NULL)
sqlite> CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
刪除表(先確定表是否存在,否則會報錯):
sqlite>.tables COMPANY test.COMPANY sqlite>DROP TABLE COMPANY; sqlite> sqlite>.tables sqlite>
插入數據:
向下麵這個表中插入數據有兩種方式
sqlite> CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
方式一:
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );
方式二:
INSERT INTO COMPANY VALUES (7, 'James', 24, 'Houston', 10000.00 );
刪除數據:
假設 COMPANY 表有以下記錄
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
刪除ID為7的客戶
sqlite> DELETE FROM COMPANY WHERE ID = 7;
刪除所有數據
sqlite> DELETE FROM COMPANY;
更新數據:
假設 COMPANY 表有以下記錄
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
下麵是一個實例,它會更新 ID 為 6 的客戶地址:
sqlite> UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;
如果您想修改 COMPANY 表中 ADDRESS 和 SALARY 列的所有值,則不需要使用 WHERE 子句,如下:
sqlite> UPDATE COMPANY SET ADDRESS = 'Texas', SALARY = 20000.00;
查詢數據:
假設 COMPANY 表有以下記錄
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
下麵是一個實例,使用 SELECT 語句獲取並顯示所有這些記錄。在這裡,前三個命令被用來設置正確格式化的輸出。
sqlite>.header on sqlite>.mode column sqlite> SELECT * FROM COMPANY;
最後,將得到以下的結果:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0