電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 14|回復: 0
收起左側

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

[復制鏈接]

240

主題

240

帖子

1196

積分

三級會員

Rank: 3Rank: 3

積分
1196
跳轉到指定樓層
樓主
發(fā)表于 昨天 21:03 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
點擊左上方藍色“一口Linux”,選擇“設為星標
第一時間看干貨文章
?【干貨】嵌入式驅動工程師學習路線?【干貨】Linux嵌入式知識點-思維導圖-免費獲取?【就業(yè)】一個可以寫到簡歷的基于Linux物聯(lián)網(wǎng)綜合項目?【就業(yè)】找工作簡歷模版


前言數(shù)據(jù)在實際工作中應用非常廣泛,數(shù)據(jù)庫的產(chǎn)品也比較多,oracle、DB2、SQL2000、mySQL;基于嵌入式linux的數(shù)據(jù)庫主要有SQLite, Firebird, Berkeley DB, eXtremeDB。
本文主要講解數(shù)據(jù)庫SQLite,通過這個開源的小型的嵌入式數(shù)據(jù)庫帶領大家掌握一些基本的數(shù)據(jù)庫操作,這些操作在很多系統(tǒng)中都是通用的,可謂學一通百。
SQLite

SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個相對小的C庫中。
作者D.RichardHipp2000年1月,Hipp開始和一個同事討論關于創(chuàng)建一個簡單的嵌入式SQL數(shù)據(jù)庫的想法,這個數(shù)據(jù)庫將使用GNU DBM哈希庫(gdbm)做后臺,同時這個數(shù)據(jù)庫將不需要安裝和管理支持。
后來,一有空閑時間,Hipp就開始實施這項工作,2000年8月,SQLite 1.0版發(fā)布了!在此向大神獻上我的膝蓋!
它的設計目標是嵌入式的,而且已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。
它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。
SQLite特性零配置一無需安裝和管理配置;儲存在單一磁盤文件中的一個完整的數(shù)據(jù)庫;數(shù)據(jù)庫文件可以在不同字節(jié)順序的機器間自由共享;支持數(shù)據(jù)庫大小至2TB;足夠小,全部源碼大致3萬行c代碼,250KB;比目前流行的大多數(shù)數(shù)據(jù)庫對數(shù)據(jù)的操作要快。[/ol]安裝現(xiàn)在運行的主要是sqlite3版本,在ubuntu下安裝也非常方便。
sudo apt-get install sqlite sqlite3   安裝應用程序
sudo apt-get install libsqlite3-dev   安裝庫+頭文件,用代碼操作數(shù)據(jù)庫必須安裝
查看版本號:輸入命令 sqlite3進入操作界面,輸入命令.version,即可查看詳細版本號。

也可以使用下面命令,安裝圖形化操作工具:
sudo apt-get install sqlitebrowser    圖形化工具建立數(shù)據(jù)庫
除此之外,還可以部署在windows下,本文只討論ubtuntu下,采用命令行方式來操作數(shù)據(jù)庫。
數(shù)據(jù)類型操作數(shù)據(jù)庫,主要就是操作表,表的每一列內容都有一定數(shù)據(jù)類型,比如整型值、字符串、布爾型等。
Sqlite3主要數(shù)據(jù)類型如下:
數(shù)據(jù)類型定義數(shù)據(jù)類型     NULL表示該值為NULL值。INTEGER無符號整型值。REAL浮點值。TEXT文本字符串,存儲使用的編碼方式為UTF-8、UTF-16BE、UTF-16LE。BLOB存儲Blob數(shù)據(jù),該類型數(shù)據(jù)和輸入數(shù)據(jù)完全相同,1表示true,0表示false。同時sqlite3也接受如下的數(shù)據(jù)類型:
數(shù)據(jù)類型定義smallint16位的整數(shù)。interger32位的整數(shù)。decimal(p,s)精確值p是指全部有幾個十進制數(shù),s是指小數(shù)點后可以有幾位小數(shù)。如果沒有特別指定,則系統(tǒng)會默認為p=5 s=0 。float32位元的實數(shù)。double64位元的實數(shù)。char(n)n 長度的字串,n不能超過 254。varchar(n)長度不固定且其最大長度為 n 的字串,n不能超過 4000。graphic(n)和 char(n) 一樣,不過其單位是兩個字節(jié), n不能超過127。這個形態(tài)是為了支持兩個字節(jié)長度的字體,如中文字。vargraphic(n)可變長度且其最大長度為n的雙字元字串,n不能超過2000date包含了 年份、月份、日期。time包含了 小時、分鐘、秒。timestamp包含了 年、月、日、時、分、秒、千分之一秒。約束表的每一列都有一些限制屬性,比如有的列的數(shù)據(jù)不能重復,有的則限制數(shù)據(jù)范圍等,約束就是用來進一步描述每一列數(shù)據(jù)屬性的。
SQLite 數(shù)據(jù)庫常用約束如下:
名稱定義NOT NULL- 非空UNIQUE唯一PRIMARY KEY主鍵FOREIGN KEY外鍵CHECK條件檢查DEFAULT默認非空 NOT NULL有一些字段我們可能一時不知到該填些什么,同時它也沒設定默認值, 當添加數(shù)據(jù)時,我們把這樣的字段空著不填,系統(tǒng)認為他是 NULL 值。
但是還有另外一類字段,必須被填上數(shù)據(jù),如果不填,系統(tǒng)就會報錯。這樣的字段被稱為 NOT NULL 非空字段,需要在定義表的時候事先聲明。
唯一 UNIQUE除了主列以為,還有一些列也不能有重復值。
主鍵 PRIMARY KEY一般是整數(shù)或者字符串,只要保證唯一就行。在 SQLite 中,主鍵如果是整數(shù)類型,該列的值可以自動增長。
外鍵 FOREIGN KEY我們的數(shù)據(jù)庫中已經(jīng)有 Teachers 表了,假如我們再建立一個 Students 表, 要求 Students 表中的每一個學生都對應一個 Teachers 表中的教師。
很簡單,只需要在 Students 表中建立一個 TeacherId 字段,保存對應教師的 Id 號, 這樣,學生和教師之間就建立了關系。
問題是:我們有可能給學生存入一個不在 Teachers 表中的 TeacherId 值, 而且發(fā)現(xiàn)不了這個錯誤。
這種情況下,可以把 Students 表中 TeacherId 字段聲明為一個外鍵, 讓它的值對應到 Teachers 表中的 Id 字段上。
這樣,一旦在 Students 表中存入一個不存在的教師 Id ,系統(tǒng)就會報錯。
默認值 DEFAULT有一些特別的字段列,在每一條記錄中,他的值基本上都是一樣的。只是在個別情況下才改為別的值,這樣的字段列我們可以給他設一個默認值。
條件檢查 CHECK某些值必須符合一定的條件才允許存入,這是就需要用到這個 CHECK 約束。
常用命令下面介紹Shell模式中的各常用命令的使用。
命令功能.help可顯示shell模式中可使用的所有命令列表.database顯示數(shù)據(jù)庫信息;包含當前數(shù)據(jù)庫的位置.mode  column使得SQL語句處理的結果以列對齊的方式顯示.mode    listcolumn.headers on/off打開關閉列標題顯示開關,以使得查詢結果在屏幕顯示時具有列標題.tables列出當前打開的數(shù)據(jù)庫中共有多少張表.exit退出SQLite環(huán)境.schema foods顯示表foods 創(chuàng)建時的SQL語句.schema顯示所有表被創(chuàng)建時的語句.nullvalue STRING查詢時用指定的串代替輸出的NULL串 默認為.nullvalue ''.show顯示shell模式中定義的與輸出相關的一些設置.output file.csv設置輸出文件格式為CSV,文件名為file.csv.separator ,設置select語句輸出的列數(shù)據(jù)間以“ ,”分隔.output stdout恢復輸出內容到標準輸出設備(屏幕)【注意】sqlite的命令都是.開頭的,操作語句前面是沒有.的。
使用實例數(shù)據(jù)庫的操作語句主要是增刪改查,下面我們通過一些實例讓大家了解數(shù)據(jù)庫的這些基本操作。
表類型假設我們要創(chuàng)建一個教學管理的數(shù)據(jù)庫jxgl.db,數(shù)據(jù)庫中要保存學生表STUDENT。
snosnamessexsagesdept95001yikoum21cs95002pengm21cs根據(jù)我們的常識,可知每一列的數(shù)據(jù)有以下特性:
sno      學號:整型值,每個人學號是唯一的,學校一般用學號來區(qū)分所有的學生,而且一般學號是遞增的,所以我們設置sno為primary key;sname 姓名:一般是字符串,可以重復,但是不能為空;ssex    性別:字符串,可以為空;sage   年齡:整型值,假定年齡要大于14;sdept  專業(yè):字符串,可以為空,此處我們默認為'CS'。下面我們一步步實現(xiàn)這個數(shù)據(jù)庫的所有操作。
創(chuàng)建教學管理“jxgl”數(shù)據(jù)庫數(shù)據(jù)庫的打開和退出,使用如下命令。

創(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í)行結果:

查看表:

看到STUDENT,說明該表創(chuàng)建好了!咀⒁狻
操作語句不是命令,前面不要加. ;操作語句后面一定要;結尾,如果漏掉了,一定要補上分號;操作語句對字母的全角半角很敏感,所有的符號都要用半角。[/ol]插入數(shù)據(jù)插入數(shù)據(jù)采用insert into語句來實現(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í)行結果如下:
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表