自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

嵌入式數(shù)據(jù)庫Sqlite3【基礎(chǔ)篇】-基本命令操作,小白一看就懂

運(yùn)維 數(shù)據(jù)庫運(yùn)維
數(shù)據(jù)在實(shí)際工作中應(yīng)用非常廣泛,數(shù)據(jù)庫的產(chǎn)品也比較多,oracle、DB2、SQL2000、mySQL;基于嵌入式linux的數(shù)據(jù)庫主要有SQLite, Firebird, Berkeley DB, eXtremeDB。

[[342477]]

前言

數(shù)據(jù)在實(shí)際工作中應(yīng)用非常廣泛,數(shù)據(jù)庫的產(chǎn)品也比較多,oracle、DB2、SQL2000、mySQL;基于嵌入式linux的數(shù)據(jù)庫主要有SQLite, Firebird, Berkeley DB, eXtremeDB。

本文主要講解數(shù)據(jù)庫SQLite,通過這個(gè)開源的小型的嵌入式數(shù)據(jù)庫帶領(lǐng)大家掌握一些基本的數(shù)據(jù)庫操作,這些操作在很多系統(tǒng)中都是通用的,可謂學(xué)一通百。

SQLite

SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個(gè)相對小的C庫中。

作者D.RichardHipp

2000年1月,Hipp開始和一個(gè)同事討論關(guān)于創(chuàng)建一個(gè)簡單的嵌入式SQL數(shù)據(jù)庫的想法,這個(gè)數(shù)據(jù)庫將使用GNU DBM哈希庫(gdbm)做后臺,同時(shí)這個(gè)數(shù)據(jù)庫將不需要安裝和管理支持。后來,一有空閑時(shí)間,Hipp就開始實(shí)施這項(xiàng)工作,2000年8月,SQLite 1.0版發(fā)布了。【在此向大神獻(xiàn)上我的膝蓋!】

它的設(shè)計(jì)目標(biāo)是嵌入式的,而且已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。

SQLite特性

  1. 零配置一無需安裝和管理配置;
  2. 儲存在單一磁盤文件中的一個(gè)完整的數(shù)據(jù)庫;
  3. 數(shù)據(jù)庫文件可以在不同字節(jié)順序的機(jī)器間自由共享;
  4. 支持?jǐn)?shù)據(jù)庫大小至2TB;
  5. 足夠小,全部源碼大致3萬行c代碼,250KB;
  6. 比目前流行的大多數(shù)數(shù)據(jù)庫對數(shù)據(jù)的操作要快。

安裝

現(xiàn)在運(yùn)行的主要是sqlite3版本,在ubuntu下安裝也非常方便。

  1. sudo apt-get install sqlite sqlite3   安裝應(yīng)用程序 
  2. sudo apt-get install libsqlite3-dev   安裝庫+頭文件,用代碼操作數(shù)據(jù)庫必須安裝 

查看版本號:輸入命令 sqlite3進(jìn)入操作界面,輸入命令.version,即可查看詳細(xì)版本號。

也可以使用下面命令,安裝圖形化操作工具:

  1. sudo apt-get install sqlitebrowser    圖形化工具建立數(shù)據(jù)庫 

除此之外,還可以部署在windows下,本文只討論ubtuntu下,采用命令行方式來操作數(shù)據(jù)庫。

數(shù)據(jù)類型

操作數(shù)據(jù)庫,主要就是操作表,表的每一列內(nèi)容都有一定數(shù)據(jù)類型,比如整型值、字符串、布爾型等。

Sqlite3主要數(shù)據(jù)類型如下:

數(shù)據(jù)類型 定義
數(shù)據(jù)類型     NULL 表示該值為NULL值。
INTEGER 無符號整型值。
REAL 浮點(diǎn)值。
TEXT 文本字符串,存儲使用的編碼方式為UTF-8、UTF-16BE、UTF-16LE。
BLOB 存儲Blob數(shù)據(jù),該類型數(shù)據(jù)和輸入數(shù)據(jù)完全相同,1表示true,0表示false。

同時(shí)sqlite3也接受如下的數(shù)據(jù)類型:

數(shù)據(jù)類型 定義
smallint 16位的整數(shù)。
interger 32位的整數(shù)。
decimal(p,s) 精確值p是指全部有幾個(gè)十進(jìn)制數(shù),s是指小數(shù)點(diǎn)后可以有幾位小數(shù)。如果沒有特別指定,則系統(tǒng)會默認(rèn)為p=5 s=0 。
float 32位元的實(shí)數(shù)。
double 64位元的實(shí)數(shù)。
char(n) n 長度的字串,n不能超過 254。
varchar(n) 長度不固定且其最大長度為 n 的字串,n不能超過 4000。
graphic(n) 和 char(n) 一樣,不過其單位是兩個(gè)字節(jié), n不能超過127。這個(gè)形態(tài)是為了支持兩個(gè)字節(jié)長度的字體,如中文字。
vargraphic(n) 可變長度且其最大長度為n的雙字元字串,n不能超過2000
date 包含了 年份、月份、日期。
time 包含了 小時(shí)、分鐘、秒。
timestamp 包含了 年、月、日、時(shí)、分、秒、千分之一秒。

約束

表的每一列都有一些限制屬性,比如有的列的數(shù)據(jù)不能重復(fù),有的則限制數(shù)據(jù)范圍等,約束就是用來進(jìn)一步描述每一列數(shù)據(jù)屬性的。SQLite 數(shù)據(jù)庫常用約束如下:

名稱 定義
NOT NULL - 非空
UNIQUE 唯一
PRIMARY KEY 主鍵
FOREIGN KEY 外鍵
CHECK 條件檢查
DEFAULT 默認(rèn)

非空 NOT NULL

有一些字段我們可能一時(shí)不知到該填些什么,同時(shí)它也沒設(shè)定默認(rèn)值, 當(dāng)添加數(shù)據(jù)時(shí),我們把這樣的字段空著不填,系統(tǒng)認(rèn)為他是 NULL 值。但是還有另外一類字段,必須被填上數(shù)據(jù),如果不填,系統(tǒng)就會報(bào)錯(cuò)。這樣的字段被稱為 NOT NULL 非空字段,需要在定義表的時(shí)候事先聲明。

唯一 UNIQUE

除了主列以為,還有一些列也不能有重復(fù)值。

主鍵 PRIMARY KEY

一般是整數(shù)或者字符串,只要保證唯一就行。在 SQLite 中,主鍵如果是整數(shù)類型,該列的值可以自動增長。

外鍵 FOREIGN KEY

我們的數(shù)據(jù)庫中已經(jīng)有 Teachers 表了,假如我們再建立一個(gè) Students 表, 要求 Students 表中的每一個(gè)學(xué)生都對應(yīng)一個(gè) Teachers 表中的教師。很簡單,只需要在 Students 表中建立一個(gè) TeacherId 字段,保存對應(yīng)教師的 Id 號, 這樣,學(xué)生和教師之間就建立了關(guān)系。問題是:我們有可能給學(xué)生存入一個(gè)不在 Teachers 表中的 TeacherId 值, 而且發(fā)現(xiàn)不了這個(gè)錯(cuò)誤。這種情況下,可以把 Students 表中 TeacherId 字段聲明為一個(gè)外鍵, 讓它的值對應(yīng)到 Teachers 表中的 Id 字段上。這樣,一旦在 Students 表中存入一個(gè)不存在的教師 Id ,系統(tǒng)就會報(bào)錯(cuò)。

默認(rèn)值 DEFAULT

有一些特別的字段列,在每一條記錄中,他的值基本上都是一樣的。只是在個(gè)別情況下才改為別的值,這樣的字段列我們可以給他設(shè)一個(gè)默認(rèn)值。

條件檢查 CHECK

某些值必須符合一定的條件才允許存入,這是就需要用到這個(gè) CHECK 約束。

常用命令

下面介紹Shell模式中的各常用命令的使用。

命令 功能
.help 可顯示shell模式中可使用的所有命令列表
.database 顯示數(shù)據(jù)庫信息;包含當(dāng)前數(shù)據(jù)庫的位置
.mode  column 使得SQL語句處理的結(jié)果以列對齊的方式顯示
.mode    list column
.headers on/off 打開關(guān)閉列標(biāo)題顯示開關(guān),以使得查詢結(jié)果在屏幕顯示時(shí)具有列標(biāo)題
.tables 列出當(dāng)前打開的數(shù)據(jù)庫中共有多少張表
.exit 退出SQLite環(huán)境
.schema foods 顯示表foods 創(chuàng)建時(shí)的SQL語句
.schema 顯示所有表被創(chuàng)建時(shí)的語句
.nullvalue STRING 查詢時(shí)用指定的串代替輸出的NULL串 默認(rèn)為.nullvalue ''
.show 顯示shell模式中定義的與輸出相關(guān)的一些設(shè)置
.output file.csv 設(shè)置輸出文件格式為CSV,文件名為file.csv
.separator , 設(shè)置select語句輸出的列數(shù)據(jù)間以“ ,”分隔
.output stdout 恢復(fù)輸出內(nèi)容到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)

【注意】sqlite的命令都是.開頭的,操作語句前面是沒有.的。

使用實(shí)例

數(shù)據(jù)庫的操作語句主要是增刪改查,下面我們通過一些實(shí)例讓大家了解數(shù)據(jù)庫的這些基本操作。

表類型

假設(shè)我們要創(chuàng)建一個(gè)教學(xué)管理的數(shù)據(jù)庫jxgl.db,數(shù)據(jù)庫中要保存學(xué)生表STUDENT。

sno sname ssex sage sdept
95001 yikou m 21 cs
95002 peng m 21 cs

根據(jù)我們的常識,可知每一列的數(shù)據(jù)有以下特性:

  • sno 學(xué)號:整型值,每個(gè)人學(xué)號是唯一的,學(xué)校一般用學(xué)號來區(qū)分所有的學(xué)生,而且一般學(xué)號是遞增的,所以我們設(shè)置sno為primary key;
  • sname 姓名:一般是字符串,可以重復(fù),但是不能為空;
  • ssex 性別:字符串,可以為空;
  • sage 年齡:整型值,假定年齡要大于14;
  • sdept 專業(yè):字符串,可以為空,此處我們默認(rèn)為'CS'。

下面我們一步步實(shí)現(xiàn)這個(gè)數(shù)據(jù)庫的所有操作。

創(chuàng)建教學(xué)管理“jxgl”數(shù)據(jù)庫

數(shù)據(jù)庫的打開和退出,使用如下命令。

創(chuàng)建表:

  1. CREATE TABLE IF NOT EXISTS STUDENT(Sno integer primary key,   Sname text not null,   Ssex text,Sage integer check(Sage>14),Sdept text default 'CS'); 

該表的屬性就是按照上一節(jié)表屬性 執(zhí)行結(jié)果:

查看表:

看到STUDENT,說明該表創(chuàng)建好了。【注意】

  1. 操作語句不是命令,前面不要加. ;
  2. 操作語句后面一定要;結(jié)尾,如果漏掉了,一定要補(bǔ)上分號;
  3. 操作語句對字母的全角半角很敏感,所有的符號都要用半角。

插入數(shù)據(jù)

插入數(shù)據(jù)采用insert into語句來實(shí)現(xiàn),如下所示:

  1. INSERT INTO STUDENT VALUES('95001','李勇','M',20,'CS'); 
  2. INSERT INTO STUDENT VALUES('95002','劉晨','F',19,'IS'); 
  3. INSERT INTO STUDENT VALUES('95003','王敏','F',18,'MA'); 
  4. INSERT INTO STUDENT VALUES('95004','張立','M',18,'IS'); 

執(zhí)行結(jié)果如下:

插入的數(shù)據(jù)只初始化部分值

設(shè)置了not null那一列 必須要賦值,而且表名字不區(qū)分大小寫。

  1. insert into student(sname,sage) values ('一口',19); 

查看表

用SELECT語句查看表中的內(nèi)容:

  1. SELECT * FROM STUDENT; 

其中的 * 表示查看所有的數(shù)據(jù)信息。

有沒有看到,結(jié)果看起來不舒服啊,下面我們來調(diào)整下顯示格式:

  1. sqlite> .headers on          顯示列名 
  2. sqlite> .mode column         列對齊 

刪除一行信息

  1. delete from student where sname='一口'

由上圖可見,名字為“一口”的那條記錄被刪除了。

修改一條記錄的某個(gè)內(nèi)容

  1. UPDATE student SET sage=29 WHERE sname='張立'

修改數(shù)據(jù)表結(jié)構(gòu)。

修改表結(jié)構(gòu),需要用到語句ALTER TABLE。下面我們向STUDENT表增加“spwd”列,其數(shù)據(jù)類型為TEXT型,用SELECT命令查看表中內(nèi)容。

  1. ALTER TABLE STUDENT ADD spwd TEXT default '123456'

修改表名字

  1. alter table student rename to stu; 

刪除數(shù)據(jù)表。

  1. DROP TABLE STUDENT; 

刪除列

sqlite3沒有實(shí)現(xiàn)刪除一列的命令,要實(shí)現(xiàn)這個(gè)操作,需要先將該表拷貝到一個(gè)新表,但是只集成需要的列,要刪除的列不繼承過來??梢? 用以下方式操作刪除一列:

  1. sqlite> create table test as select sno, sname,ssex,sage,sdept  from stu; 
  2. sqlite> drop table stu; 
  3. sqlite> alter table test rename to stu; 

由上圖可知,我們剛才增加的列spwd被刪除了。

sqlite進(jìn)階

where子句

如果我不想查看所有的數(shù)據(jù),而指向查看某一個(gè)人的信息要怎么操作呢?我們就要借助where子句來實(shí)現(xiàn)。where子句可以結(jié)合操作語句來進(jìn)程增刪改查,是最常用的一個(gè)子句。

根據(jù)姓名查找記錄:

  1. Select * from student where sname='一口'

根據(jù)學(xué)號查找記錄:

  1. Select * from student where sno=95001; 

根據(jù)姓名和年齡同時(shí)查找記錄:

  1. select *from student where sname='一口' and sage=19; 

顯示某兩列的數(shù)據(jù)

  1. select sno,sname from student ;  

數(shù)據(jù)庫的備份和恢復(fù)

現(xiàn)在我們假設(shè)要將表foods備份出為foodsdb.sql,并用命令回復(fù)該數(shù)據(jù)庫。按照以下步驟操作即可。

sqlite>.dump --把創(chuàng)建表及向表中插入記錄的所有SQL語句顯示在屏幕上sqlite>.output foodsdb.sql --指定dump命令輸出到文件的文件名sqlite>.dump --輸出創(chuàng)建并插入數(shù)據(jù)到基本表的SQL語句到output指定的文件sqlite>.output stdout --恢復(fù)輸出內(nèi)容到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)sqlite>.dump --此時(shí)輸出的SQL語句轉(zhuǎn)回到屏幕 sqlite>Drop table foods; --刪除foods表語句說明:

上述Drop為SQL語句,用于刪除指定的表。因?yàn)槭荢QL語句,因此以“;”結(jié)尾

  1. sqlite>.dump       --把創(chuàng)建表及向表中插入記錄的所有SQL語句顯示在屏幕上 
  2. sqlite>.output  foodsdb.sql --指定dump命令輸出到文件的文件名 
  3. sqlite>.dump        --輸出創(chuàng)建并插入數(shù)據(jù)到基本表的SQL語句到output指定的文件 
  4. sqlite>.output stdout  --恢復(fù)輸出內(nèi)容到標(biāo)準(zhǔn)輸出設(shè)備(屏幕) 
  5. sqlite>.dump           --此時(shí)輸出的SQL語句轉(zhuǎn)回到屏幕  
  6. sqlite>Drop table foods; --刪除foods表語句說明: 

好了,跟著一口君一步步操作,基本上sqlite3的增刪改查操作,相信各位應(yīng)該沒什么問題了,sqlite還有其他一些子句以及函數(shù)的用法,留待下一篇繼續(xù)介紹。

本文轉(zhuǎn)載自微信公眾號「一口Linux」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系一口Linux公眾號。

 

責(zé)任編輯:武曉燕 來源: 一口Linux
相關(guān)推薦

2013-04-09 16:47:19

iOS嵌入式數(shù)據(jù)庫SQLit

2020-09-18 09:15:22

數(shù)據(jù)庫Sqlite3進(jìn)階

2011-03-11 11:19:05

嵌入式數(shù)據(jù)庫

2013-04-10 14:21:35

2013-09-02 14:41:05

Java嵌入式SQLite

2011-07-07 16:42:38

iPhone Sqlite3 數(shù)據(jù)庫

2023-05-12 09:08:48

TypeScript工具類型

2020-04-15 08:33:43

Netty網(wǎng)絡(luò)通信

2012-03-06 09:50:24

Android SQLAndroidSQLite3

2020-03-27 09:06:54

選擇排序算法冒泡排序

2020-09-21 08:33:12

線程池調(diào)度Thread Pool

2021-05-14 07:11:49

方法調(diào)用類加載

2018-09-28 14:28:28

MySQL存儲過程

2019-08-14 10:20:32

算法數(shù)組鏈表

2021-07-15 09:55:47

systemdLinux文件

2019-01-15 09:55:24

RAID磁盤陣列數(shù)據(jù)存儲

2022-08-15 19:49:57

Consul架構(gòu)注冊中心

2011-03-07 09:57:24

Perst嵌入式數(shù)據(jù)庫

2022-05-29 22:55:00

適配器設(shè)計(jì)模式

2021-12-30 09:10:28

游戲開發(fā)開發(fā)技術(shù)熱點(diǎn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號