99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

一口Linux
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
所在專(zhuān)題目錄 查看專(zhuān)題
嵌入式數(shù)據(jù)庫(kù)sqlite3【基礎(chǔ)篇】-基本命令操作,小白一看就懂
嵌入式數(shù)據(jù)庫(kù)sqlite3【進(jìn)階篇】-子句和函數(shù)的使用,小白一文入門(mén)
作者動(dòng)態(tài) 更多
10種初學(xué)者最常見(jiàn)的c語(yǔ)言段錯(cuò)誤實(shí)例及原因分析
1星期前
linux系統(tǒng)監(jiān)控工具小神器:btop
3星期前
有沒(méi)有權(quán)貴開(kāi)后門(mén)讓子女做軟件開(kāi)發(fā)人員?
05-10 23:36
一文包你學(xué)會(huì)網(wǎng)絡(luò)數(shù)據(jù)抓包
03-15 09:26
C語(yǔ)言初學(xué)者編程水平上不來(lái)?不妨嘗試這10個(gè)C語(yǔ)言例子
03-14 20:31

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

前言

數(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

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

作者D.RichardHipp

2000年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特性

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

安裝

現(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)。

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

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í)sqlite3也接受如下的數(shù)據(jù)類(lèi)型:

約束

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

非空 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模式中的各常用命令的使用。

 

【注意】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。

根據(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)和退出,使用如下命令。

創(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é)果:

查看表:

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

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

插入數(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é)果如下:

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

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

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

查看表

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

SELECT * FROM STUDENT;

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

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

sqlite> .headers on          顯示列名sqlite> .mode column         列對(duì)齊

刪除一行信息

delete from student where sname='一口';

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

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

UPDATE student SET sage=29 WHERE sname='張立';

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

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

ALTER TABLE STUDENT ADD spwd TEXT default '123456';

修改表名字

alter table student rename to stu;

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

DROP TABLE STUDENT;

刪除列

sqlite3沒(méi)有實(shí)現(xiàn)刪除一列的命令,要實(shí)現(xiàn)這個(gè)操作,需要先將該表拷貝到一個(gè)新表,但是只集成需要的列,要?jiǎng)h除的列不繼承過(guò)來(lái)。可以 用以下方式操作刪除一列:

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

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

sqlite進(jìn)階

where子句

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

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

Select * from student where sname='一口';

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

Select * from student where sno=95001;

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

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

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

select sno,sname from student ; 

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

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

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

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

sqlite>.read foodsdb.sql    --執(zhí)行foodsdb.sql中的包含的所有SQL語(yǔ)句,用來(lái)重建剛刪除的4張表及相關(guān)數(shù)據(jù) 

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

聲明:本內(nèi)容為作者獨(dú)立觀(guān)點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺(jué)得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 2
收藏 2
關(guān)注 181
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧
主站蜘蛛池模板: 国产人妻人伦精品1国产盗摄 | 农村夫妇大白天啪啪 | 精品区在线观看 | 亚洲精品国产精品乱码不卞 | 国产精品二区在线 | 自拍欧美日韩一区二区三区 | 视频分类国内精品 | 久久一级黄色片 | av亚洲在线| 欧美一区不卡 | 无码一区自拍偷拍第二页 | 黄色a级片网站 | 精品无码国模私拍视频 | 久久66热人妻偷产国产 | 国产色爽女 | 中文av一区 | 四虎永久免费观看在线 | 国产欧美日韩另类色视频云霸 | 欧美日韩国产高清一区二区三区 | 野花社区免费观看视频高清 | 另类精品 | 激情亚洲一区国产精品 | 欧美日韩一区二区综合 | 久久爱九九伊人 | 久久精品色播 | a级高清毛片 | 8x拔播拔播x8国产精品 | 在线观看三级网站 | 天天爽天天狠久久久综合麻豆 | 少妇69xx| 大地资源在线影视播放 | 中文字幕无码乱码人妻系列蜜桃 | 多人伦精品一区二区三区视频 | 床震吃胸膜奶免费视频 | 亚洲精品无码久久久久去Q 国产精选一级毛片 | 免费一级好看的国产 | 可以免费观看av毛片 | 亚洲日韩亚洲另类激情文学一 | 99在线成人精品视频 | 一本之道无人区 | 乱码视频午夜在线观看 |