【数据库】适用于SQLite的SQL语句(一)
目錄
- 一、統計函數
- 二、表TABLE
- 1、創建表CREATE TABLE
- 2、更改表ALTER TABLE
- 3、刪除表DROP TABLE
- 三、分析表ANALYZE
- 四、附加數據庫 ATTACH DATABASE
- 五、事務
- 六、核心函數
- 七、索引INDEX
- 1、創建索引:CREATE INDEX
- 2、查看索引:
- 3、使用索引 INDEXED BY
- 4、刪除索引:DROP INDEX
- 八、觸發器TRIGGER
- 1、創建觸發器CREATE TRIGGER
- 2、刪除觸發器DROP TRIGGER
一、統計函數
avg(X) : 計算平均值,針對整數;
count(*):統計總行數;
count(X):統計X在組中不為NULL的行數;
group_concat(X):返回X非NULL值串聯成的字符串,以逗號‘,’分隔
group_concat(X,Y):返回X非NULL值串聯成的字符串,以‘Y’分隔
max(X):返回最大值
min(X):返回最小值
sum(X):如果所有非NULL輸入均為整數,則sum的結果為整數值。否則返回一個浮點值。如果計算時整數溢出,Sum會拋出“整數溢出”異常;
total(X):返回的結果始終是浮點值;并且不會拋出“整數溢出”異常。
二、表TABLE
1、創建表CREATE TABLE
CREATE TABLE t(x INTEGER PRIMARY KEY , y, z);
CREATE TABLE t(x INTEGER PRIMARY KEY ASC , y, z);
CREATE TABLE t(x INTEGER, y, z, PRIMARY KEY(x ASC));
CREATE TABLE t(x INTEGER, y, z, PRIMARY KEY(x DESC));
2、更改表ALTER TABLE
更改表名:ALTER TABLE 舊表名 RENAME TO 新表名;
更改列名:ALTER TABLE 表名 RENAME COLUMN 舊列名 TO 新列名;
添加列:ALTER TABLE 表名 ADD 列名 類型;
3、刪除表DROP TABLE
三、分析表ANALYZE
執行ANALYZE命令,會將分析結果保存在表sqlite_stat1中。
ANALYZE;
SELECT * FROM sqlite_stat1;
tbl|idx|stat
test1||1
tt||2
四、附加數據庫 ATTACH DATABASE
ATTACH DATABASE語句將另一個數據庫文件添加到當前數據庫連接中。可以使用DETACH DATABASE命令分離以前附加的數據庫文件。
添加數據庫:ATTACH DATABASE 附加數據庫文件名 AS 數據庫別名;
分離數據庫:DETACH DATABASE數據庫別名;
例子:
attach 'test1.db' as test1;
如果“附加數據庫文件名”存在則連接它,如果不存在則創建;連接后可以通過.database命令查看;
.database
main: /home/workspace/test/sql/test.db
test1: /home/workspace/test/sql/test1.db
使用,通過 數據庫別名.表名 來使用附加數據庫中的表;
select * from test1.test;
1|Xiao|20
2|Xiao1|21
五、事務
開始事務:BEGIN TRANSACTION
提交事務:END TRANSACTION、COMMIT
回滾事務:ROLLBACK TRANSACTION
保存點:SAVEPOINT 是一種創建事務的方法,類似于 BEGIN和COMMIT,不同之處在于SAVEPOINT和RELEASE可以命名并且可以嵌套。
六、核心函數
abs(X):返回X列的絕對值;
changes():返回最近更改(插入、刪除、更新)的行數;
char(X1,X2,…,XN):返回以整數列X1…XN為unicode編碼字符串;
注:下面例子中前兩個值為18、19,對應的unicode字符不能顯示,第三個為88,對應x
select char(age) from tt ;X
coalesce(X,Y,…):返回第一個不為NULL的副本;
glob(X,Y):和LIKE,模糊查找;
hex(X):將X視為BLOB,并返回一個字符串,該字符串是該blob內容的大寫十六進制表示形式;
ifnull(X,Y):返回XY中第一個不為NULL的副本,等于只有兩個參數的coalesce
instr(X,Y):在字符串X中查找Y
last_insert_rowid():然會最后插入的行ID;
length(X):對于字符串返回字符個數;對于BLOB返回字節數;對于整數返回字符串形式的長度;
like(X,Y):模糊查找
like(X,Y,Z):模糊查找
likelihood(X,Y):似然函數,用于統計學,最大似然估計;
likely(X):優化編譯,將X為true時,要執行的代碼編譯到前面
load_extension(X)
load_extension(X,Y)
lower(X):小寫
ltrim(X)
ltrim(X,Y):函數返回一個字符串,該字符串是通過從X的左側刪除出現在Y中的任何和所有字符形成的。如果省略Y參數,ltrim 將從X的左側刪除空格。
max(X,Y,…):最大值
min(X,Y,…):最小值
nullif(X,Y):參數相同返回NULL,參數不同,返回第一個
printf(FORMAT,…):格式化輸出
select printf("age = %d", age) from test;
age = 18
age = 19
quote(X):返回結果的文本格式,如果是字符串返回的文本帶單引號;
random():偽隨機函數;
randomblob(N):返回N個字節偽隨機BLOB值;
replace(X,Y,Z):使用Z替換X中的Y;
round(X):返回X四舍五入的整數;
round(X,Y):返回X四舍五入小數點后Y位的浮點數;
rtrim(X)
rtrim(X,Y):和ltrim類似,這次從右側刪除;
soundex(X):返回soundex編碼?
sqlite_compileoption_get(N):返回用于構建SQLite的第N個編譯時選項
sqlite_compileoption_used(X):返回是否使用X作為編譯選項;
sqlite_offset(X):沒理解
sqlite_source_id():返回源碼版本;
sqlite_version():SQLite庫的版本
substr(X,Y)
substr(X,Y,Z):從X的第Y個字符開始的Z長度的字符串;
total_changes():自打開當前數據庫連接以來,更改過的行數;
trim(X)
trim(X,Y):等于ltrim+rtrim,從兩端刪除;
typeof(X):返回類型的字符串形式;
unicode(X):和char相反,返回字符串第一個字符對應的unicode值
unlikely(X):優化編譯,將X為false時,要執行的代碼編譯到前面
upper(X):返回大寫;
zeroblob(N):返回N個值為0的BLOB類型值
七、索引INDEX
創建索引是為了給數據庫內部使用,加快查詢;不是直接給用戶使用。
1、創建索引:CREATE INDEX
創建簡單索引
CREATE INDEX index_name ON table_name (column_name);
創建唯一索引
CREATE UNIQUE INDEX index_name ON table_name (column_name);
2、查看索引:
.indexes
haha
.headers on
SELECT * FROM sqlite_master WHERE type = 'index';
type|name|tbl_name|rootpage|sql
index|haha|tt|6|CREATE INDEX haha on tt(age)
3、使用索引 INDEXED BY
在DELETE、SELECT或UPDATE上強制使用索引;INDEXED BY短語是SQLite的擴展,不能移植到其他SQL數據庫引擎中。
4、刪除索引:DROP INDEX
DROP INDEX index_name;
八、觸發器TRIGGER
當對數據庫執行插入INSERT、更新UPDATE、刪除DELETE操作時,可以自動觸發關聯動作。
1、創建觸發器CREATE TRIGGER
官方demo
// 創建更新觸發器
CREATE TRIGGER update_customer_address UPDATE OF address ON customers BEGINUPDATE orders SET address = new.address WHERE customer_name = old.name;END;// 執行更新操作
UPDATE customers SET address = '1 Main St.' WHERE name = 'Jack Jones';// 下面語句會自動執行
UPDATE orders SET address = '1 Main St.' WHERE customer_name = 'Jack Jones';
2、刪除觸發器DROP TRIGGER
DROP TRIGGER trigger-name;
總結
以上是生活随笔為你收集整理的【数据库】适用于SQLite的SQL语句(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和平精英灵敏度2021年最稳分享码?
- 下一篇: 【数据库】适用于SQLite的SQL语句