SQLite數據庫
1.SQLite數據庫簡介
SQLite 是一個開源的、內嵌式的關系型數據庫,第一個版本誕生于 2000 年 5 月,目前最高版本為 SQLite3。
學習網站:http://www.runoob.com/sqlite/sqlite-tutorial.html
安裝方法:( 我用的是ubuntu12.04)
字符界面:
sudo apt-get install sqlite3
圖形界面:
sudo apt-get install sqliteman
SQLite 特性:
零配置 、靈活、可移植、自由的授權、緊湊、可靠、簡單 、易用
2.SQL數據類型及基礎語句
SQL 是一種結構化查詢語言(Structured Query Language)的縮寫,SQL 是一種專門用來與數據庫通信的語言。
SQL 目前已成為應用最廣的數據庫語言。
SQL 已經被眾多商用數據庫管理系統產品所采用,不同的數據庫管理系統在其實踐過程中都對 SQL 規范作了某些編改和擴充。故不同數據庫管理系統之間的 SQL 語言不能完全相互通用。
SQLite 數據類型:
一般數據采用固定的靜態數據類型,而 SQLite 采用的是動態數據類型,會根據存入值自動判斷。
SQLite 具有以下五種基本數據類型:
1、integer:帶符號的整型(最多 64 位)。
2、real:8 字節表示的浮點類型。
3、text:字符類型,支持多種編碼(如 UTF-8、UTF-16),大小無限制。
4、blob:任意類型的數據,大小無限制。 BLOB(binary large object)二進制大對象,使用二進制保存數
5、null:表示空值。
數據庫文件操作的SQL語句:(這里指SQLite數據庫)
1.創建、打開數據庫
sqlite3 *.db
功能:
當*.db文件不存在時,sqlite3會創建并打開數據庫文件。
當*.db文件存在時,sqlite3會打開數據庫文件。
2、退出數據庫命令:
.quit or .exit
SQL 的語句格式:(重要)
所有的 SQL 語句都是以分號結尾的,SQL 語句不區分大小寫。兩個減號“–”則代表注釋。
對打開的數據庫文件無非就是一下操作:
一、創建、修改、刪除表
二、添加、修改、刪除行、查表(增刪改查)
(1)創建表 create
語法:create table 表名稱 (列名稱1 數據類型, 列名稱2 數據類型, ......,列名稱n 數據類型);
創建表格,該表包含3列,列名分別是:“id”、“name”、“addr”。
create table person(id integer,name text,addr text); //person為表名 ;表示結束
在用 sqlite創建表時,每個表都可以通過 primary key手動設置主鍵,每個表只能有一個主鍵,設置為
主鍵的列數據不可以重復。(比如:學號、id等)
語法:create table 表名稱 (列名稱1 數據類型 primary key, 列名稱2 數據類型, ......,列名稱n 數據類型);
把上面表中的id設為主鍵
create table person(id integer primary key,name text,addr text); //person為表名 ;表示結束
查看當前數據庫文件中有哪些表 .table
查看當前數據庫中表的結構: .schema 表名(此參數沒有查看所有)
(2)修改表 alter
在已有的表中添加或刪除列以及修改表名。
語法:alter table 表名 add 列名 數據類型; //添加列
alter table 表名 rename to 新表名; //重命名
(刪除-sqlite3 暫不支持)
向person表中添加新的一列
alter table person add sex text; //person表 add添加一列 sex列名稱 text列屬性
重命名person表為new_person
alter table person rename to new_person; //person表 rename to修改表名 new_person新表名
(3)刪除表 drop table
用于刪除表(表的結構、屬性以及表的索引也會被刪除)
語法:drop table 表名稱;
將new_person表刪除
drop table new_person; //drop table刪除表 new_person表名
這時用 .table 查不到數據庫文件中有名為new_person的表
(4)插入新行:insert into (增)
語法:insert into 表名 values(列值1,列值2,列值3列值4,...); //給一行中的所有列賦值
語法:insert into 表名(列名1,列名2,...) values(列值1,列值2,...); //給一行中的部分列賦值
注意:
當列值為字符串時要加上''號。
例如:
//創建一個person表
create table person(id integer primary key,name text,addr text);
//增加一行內容
insert into person value(1,'lucy','beijing');
//增加一行部分列值
insert into person(id,name) value(2,'Peter'); //這時候的id不能再設置為1
(5) 刪除表中的數據:delete from (刪)
使用 where 根據匹配條件,查找一行或多行,根據查找的結果刪除表中的查找到的行。
語法:delete from 表名 [匹配條件];
匹配:where 子句
where 子句用于規定匹配的條件。
匹配條件語法:
where 列名 操作符 列值
注意:
當表中有多列、多行符合匹配條件時會刪除相應的多行。
刪除name為peter的那一行
delete from person where name='peter'; //person表 where匹配條件
(6)修改表中的數據:update (改)
使用 where 根據匹配條件,查找一行或多行,根據查找的結果修改表中相應行的列值(修改哪一列由列名指定)。
語法:update 表名 set列1=值1 [,列2=值2,...] [匹配條件];
匹配條件:
= > < >= <= <>(不等于)
注意:
當表中有多列、多行符合匹配條件時會修改相應的多行。當匹配條件為空時則匹配所有。
例如:
update person set id=2,addr='tianjing' where name='lucy';
(7)查詢:select (查)
用于從表中選取數據,結果被存儲在一個結果表中(稱為結果集)。
.mode column //左對齊列
.headers on //列名顯示
語法:
1、select * from 表名 [匹配條件];
2、select 列名1[,列名2,...] from 表名 [匹配條件];
提示:
星號(*)是選取所有列的通配符。
例如:
select * from person; //查找person全部內容
select * from person where id=1; //查找person表id=1的行信息
select name from person ; //查找person表中的name列信息
3.匹配條件語法 (提高)
數據庫提供了豐富的操作符配合 where 子句實現了多種多樣的匹配方法。
例如: in、and、or、between and、like、not
一、in 操作符
in 允許我們在 where 子句中規定多個值。
匹配條件語法:where 列名 in (列值1, 列值2, ...);
select * from person where id in(1,2); //查找id信息為1和2的所有信息
二、and 操作符
and 可在 where 子語句中把兩個或多個條件結合起來。(多個條件之間是與的關系)
匹配條件語法:where 列1 = 值1 [and 列2 = 值2 and ...];
select name from person where id=1 and addr='beijing'; //查找id為1,地址beijing對應的name
三、or 操作符
or 可在 where 子語句中把兩個或多個條件結合起來。(多個條件之間是或的關系)。
匹配條件語法:where 列1 = 值1 [or 列2 = 值2 or ...];
select * from person where id=1 or name='peter'; //查找id為1 或者name為peter的所有信息
四、between and 操作符
操作符 between A and B 會選取介于A、B之間的數據范圍。這些值可以是數值、文本或者日期。
不同數據庫存在的差別:
(1)有些數據庫包含A不包含B。
(2)有些包含B不包含A。
(3)有些既不包括A也不包括B。
(4)有些既包括A又包括B。(SQLite數據庫)
匹配的語法格式:where 列名 between A and B
select * from person where id between 1 and 3; //查找id在1到3的所有信息
五、like 操作符
用于模糊查找
匹配條件語法:where 列名 like 列值
1、若列值為數字
相當于列名=列值。
2、若列值為字符串
可以用通配符“%”代表缺少的字符(一個或多個)
select * from person where name like '%uc%' //查找name中帶有uc的所有信息
六、not 操作符
not 可取出原結果集的補集。(就是在where子句中加not)
匹配條件語法:where 列名 not in 列值;
例如:
1、where 列名 not in (列值1, 列值2, ...)
2、where not (列1 = 值1 [and 列2 = 值2 and ...])
3、where not (列1 = 值1 [or 列2 = 值2 or ...])
4、where 列名 not between A and B
5、where 列名 not like 列值
order by(了解)
根據指定的列對結果集進行排序。
默認按照升序對結果集進行排序,可使用 desc 關鍵字按照降序對結果集進行排序。
升序
select * from 表名 order by 列名;
降序
select * from 表名 order by 列名 desc;
事務(了解)
事務(Transaction)可以使用 BEGIN TRANSACTION 命令或簡單的 BEGIN 命令來啟動。此類事務通常會持續執行下去,直到遇到下一個 COMMIT 或 ROLLBACK 命令。不過在數據庫關閉或發生錯誤時,事務處理也會回滾。以下是啟動一個事務的簡單語法:
在SQLite中,默認情況下,每條SQL語句自成事務。
begin:開始一個事務,之后的所有操作都可以取消
commit:使begin后的所有命令得到確認。
rollback:取消begin后的所有操作。
這里不再舉例,自己玩玩就可以,挺簡單的。
給大家提供一個練習
1、創建一張表,表名為:persons,表的格式為(id integer primary key, name text, addr text, score integer),id 設置為主鍵
2、使用事務在表中插入 5 個人的信息,設置各個人的信息不一樣
3、查看插入 5 個人的信息是否正確,正確結束事務否則修改
4、修改 id=1 的學生信息 name=‘coolboy’, score=87;
5、通過查詢語句查看 id=1 的學生信息是否修改正確
6、查看分數 score >=87 學生的名字 name
7、刪除 id=2 的學生全部信息
8、查看 id=3 和 id=4 學生的分數
9、查看 id=1 并且 score=87 的學生信息
10、查看分數在 80 至 100 之間的學生姓名
11、查看名字 name 中有’cool’字符串的學生信息
12、查看 id 不等于 1 的所有學生的信息
13、按分數從小到大排序,將學生信息打印出來
14、按 id 號,從大到小,將學生信息打印出來
提示:如果不確定執行的語句是否正確,那么最好先執行事務 begin,確定執行是正確時,在執行確認 commit。想要驗證答案可以練習小編
4.SQL語句提高
1.函數和聚合
SQL語句支持利用函數來處理數據,函數一般是在數據上執行的,它給數據的轉換和處理提供了方便。
常用的文本處理函數:
length() 返回字符串的長度
lower() 將字符串轉換為小寫
upper() 將字符串轉換為大寫
select * upper(addr) from person; //保存大寫地址
select id,length(name) from person; //保存名字長度
2.常用的聚集函數
使用聚集函數,用于檢索數據,以便分析和生成報表
avg() 返回某列的平均值
count() 返回某列的行數
max() 返回某列的最大值
min() 返回某列的最小值
sum() 返回某列值之和
select avg(score) from person; //保存平均分數
select id,name,max(score) from person //保存最大分數
select sum(score) from person; //保存分數總和
SQL語句提高中還有數據分組(group by)、過濾分組(having)、約束(unique、primary key)、聯結表(多表操作)、視圖(view)、觸發器(trigger)、索引(index)等,將在下一篇文章中敘述。
關注博主不迷路
智能推薦
數據庫SQLite<一>
一、SQLite數據庫簡介 SQLite第一個Alpha版本誕生于2000年5月,它是一款輕量級數據庫,它的設計目標是嵌入式的,占用資源非常的低,只需要幾百K的內存就夠了。SQLite已經被多種軟件和產品使用,Mozilla FireFox就是使用SQLite來存儲配置數據的,Android和iPhone都是使用SQLite來存儲數據的。 二、Android中如何使用SQLite 1. 使用SQL...
《Python》《SQLite》Python連接SQLite數據庫,讀表
配置Python環境的方法在我的博客中已經詳細介紹。 一、SQLite和PySQLite 在最近的Python版本中(從2.5開始),SQLite的優勢在于它的一個包裝(PySQLite)已經被包括在標準庫內。SQLite在Python中的模塊名稱為“sqlite3”,我們可以在...
《SQLite》最輕巧的數據庫SQLite——初探
文章目錄 一、SQLite概念及優點 二、SQLite圖形化管理工具——SQLite Expert Professional 三、SQLite基礎語言 1、創建數據庫 2、刪除數據庫 3、創建表 4、刪除表 5、表操作語句 一、SQLite概念及優點 概念: SQLite是一款嵌入式數據庫,和Oracle、Mysql、DB2等數據庫不同,比如Oracle它是與程序分離的,而...
Android數據庫 之 SQLite數據庫
2019獨角獸企業重金招聘Python工程師標準>>> 每個應用程序都要使用數據,Android應用程序也不例外,Android使用開源的、與操作系統無關的SQL數據庫—SQLite。 SQLite第一個Alpha版本誕生于2000年5月,它是一款輕量級數據庫,它的設計目標是嵌入式的,占用資源非常的低,只需要幾百K的內存就夠了。 SQLite已經被多種軟件和產品使用,...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...