數據庫SQLite的基礎語法
SQLite
1. 什么是SQLite:
(1) SQLite是一款輕型的嵌入式數據庫
(2) 它占用的資源非常低,在嵌入式設備中,可能只需要幾百K的內存就夠了
(3) 它的處理速度比Musql、PostgreSQL這兩款著名的數據庫都還快
2.什么是數據庫
(1) 數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫
(2) 數據庫可以分為2大種類:
- 關系型數據庫(主流)
- 對象型數據庫
3.常用關系型數據庫
(1) PC端: Oracle、MySQL、SQL Server、Access、DB2、Sybase
(2) 嵌入式\移動客戶端: SQLite
SQL語句的種類
1. 數據定義語句(DDL:Data Definition Language)
(1) 包括creare和drop等操作
(2) 在數據庫中創建新表或刪除表(create table 或 drop table)
2. 數據操作語句(DML: Data Manipulation Language)
(1) 包括insert、update、delete等操作
(2) 上面的三種操作分別用于添加、修改、刪除表中的數據
3. 數據查詢語句(DQL: Data Query language)
(1) 可以用于查詢獲得表中的數據
(2) 關鍵字select 是DQL(也是所有SQL)用的最多的操作
(3) 其他DQL常用的關鍵字有where、order by、group和having
主鍵的聲明
什么是主鍵
(1) 主鍵(primary key,簡稱PK)用來唯一的標識某一條記錄
(2) 例如t_student可以增加一個id字段作為主鍵,相當于人的身份證
(3) 主鍵可以是一個字段或多個字段
1. 在創建表的時候用primary key聲明一個主鍵
(1) 例:create table t_student(id integer primary key,name text,age integer);
(2) integer類型的id作為t_student表的主鍵
2. 主鍵字段
(1) 只要聲明為primary key,就說明是一個主鍵字段
(2) 主鍵字段默認就包含了not null 和unique兩個約束
3. 自動增長
(1) 如果想要讓主鍵自動增長(必須是integer類型),應該增加autoincrement
(2) create table t_student(id integer primary key autoincrement,name text,age integer);
主鍵的設計原則
- 主鍵應當是對用戶沒有意義的
- 永遠也不要更新主鍵
- 主鍵不應包含動態變化的數據
- 主鍵應當由計算機自動生成
主鍵約束
- 如果t_student表中就name和age兩個字段,而且有些紀錄的name和age字段的值都一樣時,那么就沒法區分這些數據,造成數據庫的紀錄不唯一,這樣就不方便管理數據。
- 良好的數據庫編程規范應該要保證每條記錄的唯一性,為此,增加了主鍵約束,也就是說,每張表都必須有一個主鍵,用來標識記錄的唯一性。
簡單約束
- 建表時可以給特定的字段設置一些約束條件,常見的約束有:
(1) not null : 規定字段的值不能為null
(2) unique : 規定字段的值必須唯一
(3) default : 指定字段的默認值(建議: 盡量給字段設定嚴格的約束,以保證數據的規范性) - 示例
(1) create table t_student(id integer,name text not null unique,age integer not not null default 1);
(2) 注:
a. name字段不能為null,并且唯一;
b. age字段不能為null,并且默認為1.
limit
- 使用limit 可以精確的控制查詢結果的數量,比如每次只查詢10條數據
格式:
select * from 表名 limit 數值1,數值2; - 示例:
select * from t_student limit 4,8;
可以理解為:跳過最前面的4條語句,然后取8條記錄
排序
1. 查詢出來的結果可以用ordeer by進行排序
(1) select * from t_student order by 字段;
(2) select * from t_student order by age;
2. 默認是按照升序排序(由小到大),也可以變為降序(由大到小)
(1) select * from t_student order by age desc; // 降序
(2) select * from t_student order by age asc; // 升序(默認)
3. 也可以用多個字段進行排序
(1) select * from t_student order by age asc,height desc;
(2) 注: 先按照年齡排序(升序),年齡相等就按照身高排序(降序)
SQL語法
1.注釋:
多行注釋: /*注釋*/
單行注釋: --
2.特點
(1). 不區分大小寫
(3). 每條語句后必須加封號
(4). 字符串使用單引號括起來
(5). 字段類型: text -> 字符串類型 integer -> 整型 real -> 浮點型
3.
-- DDL語句(數據定義語句)
-- 1. 創建表
-- 格式 CREATE TABLE 表名(字段名1 字段1類型, 字段名2 字段2類型,...);
-- CREATE TABLE t_Student('name' text, 'age' integer, 'score' real);
-- 格式: CREATE TABLE IF NOT EXISTS 表名(字段名1 字段1類型, 字段名2 字段2類型,...);
-- CREATE TABLE IF NOT EXISTS TABLE t_Student('name' text, 'age' integer, 'score' real);
-- 完整的創建表的示例:
-- a.創建表的時候必須設置主鍵
CREATE TABLE IF NOT EXISTS t_Student(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer DEFAULT 18, studyId integer UNIQUE);
-- 2. 刪除表
-- 格式 1:
-- DROP t_Student;
-- 格式 2: DROP TABLE IF EXISTS 表名; -> 當表存在的時候刪除表
-- DROP TABLE IF EXISTS t_Student;
-- DML語句(增刪改)
-- 1. 插入數據(insert): INSERT INTO 表名(字段名1,字段名2,...) VALUES(字段1的值,字段2的值,...);
-- INSERT INTO t_Student('name','age','score') VALUES('小明',23,98);
-- INSERT INTO t_Student('name','age','score') VALUES('阿郎',20,92);
-- INSERT INTO t_Student('name','age','score') VALUES('阿蘭',20,52);
INSERT INTO t_Student('name','age','studyId') VALUES('阿蘭',20,100);
INSERT INTO t_Student('name','studyId') VALUES('阿郎',101);
-- 2. 修改數據
-- 格式:UPDATE 表名 SET 字段名1=字段1的新值,字段名2=字段2的新值,...
-- UPDATE t_Student SET 'age'=18; -- 注意:這樣寫所有的學生的年齡都會變成18
-- 將表中'小明'的年齡變成18
-- UPDATE t_Student SET age=18 WHERE name='小明';
-- 3. 刪除數據
-- 格式: DELETE FROM 表名;
-- DELETE FROM t_Student; -- 注意:刪除表中的所有的數據
-- 將表中成績小于60的學生信息刪除
-- DELETE FROM t_Student WHERE score<60;
-- DQL語句
-- 查詢數據
-- 格式1:SELECT 字段1,字段2,...FROM 表名;
-- SELECT name,score FROM t_Student;
-- 格式2: SELECT * FROM 表名; -- 查詢表中所有的字段
SELECT * FROM t_Student;
-- 2. 獲取表中的數據的個數
-- 格式1: SELECT count(*) FROM 表名;
SELECT count(*) FROM t_Student;
-- 3. 對查詢結果進行排序
-- 格式:SELECT * FROM 表名 ORDER BY 字段名;
-- SELECT * FROM t_Student ORDER BY score; -- 將查詢結果按照分數從小到大排序
-- SELECT * FROM t_Student ORDER BY score DESC; -- 將查詢結果按照分數從大到小排序
-- 4. 限制查詢的結果的數量
-- 格式:SELECT * FROM t_Student LIMIT 數值1,數值2; -- 數值1 -> 從0開始數第幾條數據開始獲取; 數值2 -> 一次獲取數據的數量
-- SELECT * FROM t_Student LIMIT 1,5;
-- 計算表中不及格的學生的數量
-- SELECT count(*) FROM t_Student WHERE score<60;
-- 獲取表中年齡大于20,分數小于60的學生的所有成績
-- SELECT * FROM t_Student WHERE age>19 AND score<60;