|
點(diǎn)擊左上方藍(lán)色“一口Linux”,選擇“設(shè)為星標(biāo)”
第一時(shí)間看干貨文章
?【干貨】嵌入式驅(qū)動(dòng)工程師學(xué)習(xí)路線(xiàn)?【干貨】Linux嵌入式知識(shí)點(diǎn)-思維導(dǎo)圖-免費(fèi)獲取?【就業(yè)】一個(gè)可以寫(xiě)到簡(jiǎn)歷的基于Linux物聯(lián)網(wǎng)綜合項(xiàng)目?【就業(yè)】找工作簡(jiǎn)歷模版
tlqhndjfplz64031561924.gif (555.24 KB, 下載次數(shù): 10)
下載附件
保存到相冊(cè)
tlqhndjfplz64031561924.gif
2024-9-21 06:53 上傳
前言數(shù)據(jù)在實(shí)際工作中應(yīng)用非常廣泛,數(shù)據(jù)庫(kù)的產(chǎn)品也比較多,oracle、DB2、SQL2000、mySQL;基于嵌入式linux的數(shù)據(jù)庫(kù)主要有SQLite, Firebird, Berkeley DB, eXtremeDB。
本文主要講解數(shù)據(jù)庫(kù)SQLite,通過(guò)這個(gè)開(kāi)源的小型的嵌入式數(shù)據(jù)庫(kù)帶領(lǐng)大家掌握一些基本的數(shù)據(jù)庫(kù)操作,這些操作在很多系統(tǒng)中都是通用的,可謂學(xué)一通百。
SQLite
2kr1t2kruil64031562024.jpg (62.85 KB, 下載次數(shù): 13)
下載附件
保存到相冊(cè)
2kr1t2kruil64031562024.jpg
2024-9-21 06:53 上傳
SQLite,是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它包含在一個(gè)相對(duì)小的C庫(kù)中。
作者D.RichardHipp2000年1月,Hipp開(kāi)始和一個(gè)同事討論關(guān)于創(chuàng)建一個(gè)簡(jiǎn)單的嵌入式SQL數(shù)據(jù)庫(kù)的想法,這個(gè)數(shù)據(jù)庫(kù)將使用GNU DBM哈希庫(kù)(gdbm)做后臺(tái),同時(shí)這個(gè)數(shù)據(jù)庫(kù)將不需要安裝和管理支持。
后來(lái),一有空閑時(shí)間,Hipp就開(kāi)始實(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í)能夠跟很多程序語(yǔ)言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開(kāi)源的世界著名數(shù)據(jù)庫(kù)管理系統(tǒng)來(lái)講,它的處理速度比他們都快。
SQLite特性零配置一無(wú)需安裝和管理配置;儲(chǔ)存在單一磁盤(pán)文件中的一個(gè)完整的數(shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由共享;支持?jǐn)?shù)據(jù)庫(kù)大小至2TB;足夠小,全部源碼大致3萬(wàn)行c代碼,250KB;比目前流行的大多數(shù)數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)的操作要快。[/ol]安裝現(xiàn)在運(yùn)行的主要是sqlite3版本,在ubuntu下安裝也非常方便。
sudo apt-get install sqlite sqlite3 安裝應(yīng)用程序
sudo apt-get install libsqlite3-dev 安裝庫(kù)+頭文件,用代碼操作數(shù)據(jù)庫(kù)必須安裝
查看版本號(hào):輸入命令 sqlite3進(jìn)入操作界面,輸入命令.version,即可查看詳細(xì)版本號(hào)。
nn2ezebfq0564031562124.png (38.31 KB, 下載次數(shù): 10)
下載附件
保存到相冊(cè)
nn2ezebfq0564031562124.png
2024-9-21 06:53 上傳
也可以使用下面命令,安裝圖形化操作工具:
sudo apt-get install sqlitebrowser 圖形化工具建立數(shù)據(jù)庫(kù)
除此之外,還可以部署在windows下,本文只討論ubtuntu下,采用命令行方式來(lái)操作數(shù)據(jù)庫(kù)。
數(shù)據(jù)類(lèi)型操作數(shù)據(jù)庫(kù),主要就是操作表,表的每一列內(nèi)容都有一定數(shù)據(jù)類(lèi)型,比如整型值、字符串、布爾型等。
Sqlite3主要數(shù)據(jù)類(lèi)型如下:
數(shù)據(jù)類(lèi)型定義數(shù)據(jù)類(lèi)型 NULL表示該值為NULL值。INTEGER無(wú)符號(hào)整型值。REAL浮點(diǎn)值。TEXT文本字符串,存儲(chǔ)使用的編碼方式為UTF-8、UTF-16BE、UTF-16LE。BLOB存儲(chǔ)Blob數(shù)據(jù),該類(lèi)型數(shù)據(jù)和輸入數(shù)據(jù)完全相同,1表示true,0表示false。同時(shí)sqlite3也接受如下的數(shù)據(jù)類(lèi)型:
數(shù)據(jù)類(lèi)型定義smallint16位的整數(shù)。interger32位的整數(shù)。decimal(p,s)精確值p是指全部有幾個(gè)十進(jìn)制數(shù),s是指小數(shù)點(diǎn)后可以有幾位小數(shù)。如果沒(méi)有特別指定,則系統(tǒng)會(huì)默認(rèn)為p=5 s=0 。float32位元的實(shí)數(shù)。double64位元的實(shí)數(shù)。char(n)n 長(zhǎng)度的字串,n不能超過(guò) 254。varchar(n)長(zhǎng)度不固定且其最大長(zhǎng)度為 n 的字串,n不能超過(guò) 4000。graphic(n)和 char(n) 一樣,不過(guò)其單位是兩個(gè)字節(jié), n不能超過(guò)127。這個(gè)形態(tài)是為了支持兩個(gè)字節(jié)長(zhǎng)度的字體,如中文字。vargraphic(n)可變長(zhǎng)度且其最大長(zhǎng)度為n的雙字元字串,n不能超過(guò)2000date包含了 年份、月份、日期。time包含了 小時(shí)、分鐘、秒。timestamp包含了 年、月、日、時(shí)、分、秒、千分之一秒。約束表的每一列都有一些限制屬性,比如有的列的數(shù)據(jù)不能重復(fù),有的則限制數(shù)據(jù)范圍等,約束就是用來(lái)進(jìn)一步描述每一列數(shù)據(jù)屬性的。
SQLite 數(shù)據(jù)庫(kù)常用約束如下:
名稱(chēng)定義NOT NULL- 非空UNIQUE唯一PRIMARY KEY主鍵FOREIGN KEY外鍵CHECK條件檢查DEFAULT默認(rèn)非空 NOT NULL有一些字段我們可能一時(shí)不知到該填些什么,同時(shí)它也沒(méi)設(shè)定默認(rèn)值, 當(dāng)添加數(shù)據(jù)時(shí),我們把這樣的字段空著不填,系統(tǒng)認(rèn)為他是 NULL 值。
但是還有另外一類(lèi)字段,必須被填上數(shù)據(jù),如果不填,系統(tǒng)就會(huì)報(bào)錯(cuò)。這樣的字段被稱(chēng)為 NOT NULL 非空字段,需要在定義表的時(shí)候事先聲明。
唯一 UNIQUE除了主列以為,還有一些列也不能有重復(fù)值。
主鍵 PRIMARY KEY一般是整數(shù)或者字符串,只要保證唯一就行。在 SQLite 中,主鍵如果是整數(shù)類(lèi)型,該列的值可以自動(dòng)增長(zhǎng)。
外鍵 FOREIGN KEY我們的數(shù)據(jù)庫(kù)中已經(jīng)有 Teachers 表了,假如我們?cè)俳⒁粋(gè) Students 表, 要求 Students 表中的每一個(gè)學(xué)生都對(duì)應(yīng)一個(gè) Teachers 表中的教師。
很簡(jiǎn)單,只需要在 Students 表中建立一個(gè) TeacherId 字段,保存對(duì)應(yīng)教師的 Id 號(hào), 這樣,學(xué)生和教師之間就建立了關(guān)系。
問(wèn)題是:我們有可能給學(xué)生存入一個(gè)不在 Teachers 表中的 TeacherId 值, 而且發(fā)現(xiàn)不了這個(gè)錯(cuò)誤。
這種情況下,可以把 Students 表中 TeacherId 字段聲明為一個(gè)外鍵, 讓它的值對(duì)應(yīng)到 Teachers 表中的 Id 字段上。
這樣,一旦在 Students 表中存入一個(gè)不存在的教師 Id ,系統(tǒng)就會(huì)報(bào)錯(cuò)。
默認(rèn)值 DEFAULT有一些特別的字段列,在每一條記錄中,他的值基本上都是一樣的。只是在個(gè)別情況下才改為別的值,這樣的字段列我們可以給他設(shè)一個(gè)默認(rèn)值。
條件檢查 CHECK某些值必須符合一定的條件才允許存入,這是就需要用到這個(gè) CHECK 約束。
常用命令下面介紹Shell模式中的各常用命令的使用。
命令功能.help可顯示shell模式中可使用的所有命令列表.database顯示數(shù)據(jù)庫(kù)信息;包含當(dāng)前數(shù)據(jù)庫(kù)的位置.mode column使得SQL語(yǔ)句處理的結(jié)果以列對(duì)齊的方式顯示.mode listcolumn.headers on/off打開(kāi)關(guān)閉列標(biāo)題顯示開(kāi)關(guān),以使得查詢(xún)結(jié)果在屏幕顯示時(shí)具有列標(biāo)題.tables列出當(dāng)前打開(kāi)的數(shù)據(jù)庫(kù)中共有多少?gòu)埍?exit退出SQLite環(huán)境.schema foods顯示表foods 創(chuàng)建時(shí)的SQL語(yǔ)句.schema顯示所有表被創(chuàng)建時(shí)的語(yǔ)句.nullvalue STRING查詢(xún)時(shí)用指定的串代替輸出的NULL串 默認(rèn)為.nullvalue ''.show顯示shell模式中定義的與輸出相關(guān)的一些設(shè)置.output file.csv設(shè)置輸出文件格式為CSV,文件名為file.csv.separator ,設(shè)置select語(yǔ)句輸出的列數(shù)據(jù)間以“ ,”分隔.output stdout恢復(fù)輸出內(nèi)容到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)【注意】sqlite的命令都是.開(kāi)頭的,操作語(yǔ)句前面是沒(méi)有.的。
使用實(shí)例數(shù)據(jù)庫(kù)的操作語(yǔ)句主要是增刪改查,下面我們通過(guò)一些實(shí)例讓大家了解數(shù)據(jù)庫(kù)的這些基本操作。
表類(lèi)型假設(shè)我們要?jiǎng)?chuàng)建一個(gè)教學(xué)管理的數(shù)據(jù)庫(kù)jxgl.db,數(shù)據(jù)庫(kù)中要保存學(xué)生表STUDENT。
snosnamessexsagesdept95001yikoum21cs95002pengm21cs根據(jù)我們的常識(shí),可知每一列的數(shù)據(jù)有以下特性:
sno 學(xué)號(hào):整型值,每個(gè)人學(xué)號(hào)是唯一的,學(xué)校一般用學(xué)號(hào)來(lái)區(qū)分所有的學(xué)生,而且一般學(xué)號(hào)是遞增的,所以我們?cè)O(shè)置sno為primary key;sname 姓名:一般是字符串,可以重復(fù),但是不能為空;ssex 性別:字符串,可以為空;sage 年齡:整型值,假定年齡要大于14;sdept 專(zhuān)業(yè):字符串,可以為空,此處我們默認(rèn)為'CS'。下面我們一步步實(shí)現(xiàn)這個(gè)數(shù)據(jù)庫(kù)的所有操作。
創(chuàng)建教學(xué)管理“jxgl”數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)的打開(kāi)和退出,使用如下命令。
vromb0cy4kl64031562224.png (41.11 KB, 下載次數(shù): 11)
下載附件
保存到相冊(cè)
vromb0cy4kl64031562224.png
2024-9-21 06:53 上傳
創(chuàng)建表: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é)果:
egmljmx5jng64031562324.png (143.18 KB, 下載次數(shù): 10)
下載附件
保存到相冊(cè)
egmljmx5jng64031562324.png
2024-9-21 06:53 上傳
查看表:
niemu2fk2hk64031562425.png (10.58 KB, 下載次數(shù): 10)
下載附件
保存到相冊(cè)
niemu2fk2hk64031562425.png
2024-9-21 06:53 上傳
看到STUDENT,說(shuō)明該表創(chuàng)建好了!咀⒁狻
操作語(yǔ)句不是命令,前面不要加. ;操作語(yǔ)句后面一定要;結(jié)尾,如果漏掉了,一定要補(bǔ)上分號(hào);操作語(yǔ)句對(duì)字母的全角半角很敏感,所有的符號(hào)都要用半角。[/ol]插入數(shù)據(jù)插入數(shù)據(jù)采用insert into語(yǔ)句來(lái)實(shí)現(xiàn),如下所示:
INSERT INTO STUDENT VALUES('95001','李勇','M',20,'CS');
INSERT INTO STUDENT VALUES('95002','劉晨','F',19,'IS');
INSERT INTO STUDENT VALUES('95003','王敏','F',18,'MA');
INSERT INTO STUDENT VALUES('95004','張立','M',18,'IS');
執(zhí)行結(jié)果如下: |
|