數(shù)據(jù)庫(kù)入門
數(shù)據(jù)庫(kù)入門一肄方、簡(jiǎn)介1. 數(shù)據(jù)2. 數(shù)據(jù)庫(kù)(DB)3. 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)4. 數(shù)據(jù)庫(kù)系統(tǒng)(DBS)二、關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)1. 常用數(shù)據(jù)庫(kù)2. 關(guān)系型數(shù)據(jù)庫(kù)0. 適用場(chǎng)景1. 優(yōu)點(diǎn)2. 缺點(diǎn)3. 非關(guān)系型數(shù)據(jù)庫(kù)0. 適用場(chǎng)景1. 優(yōu)點(diǎn)2. 缺點(diǎn)3. 非關(guān)系型數(shù)據(jù)庫(kù)的分類和比較1. 文檔性2. key-value型3. 列式數(shù)據(jù)庫(kù)4. 圖形數(shù)據(jù)庫(kù)三滑绒、SQL1. 數(shù)據(jù)定義1. 定義基本表2. 修改基本表3. 刪除基本表2. 數(shù)據(jù)查詢3. 數(shù)據(jù)更新1. 插入數(shù)據(jù)2. 修改數(shù)據(jù)3. 刪除數(shù)據(jù)4. 視圖四、數(shù)據(jù)庫(kù)的安全性與完整性
一隘膘、簡(jiǎn)介
我們先來(lái)介紹一些數(shù)據(jù)庫(kù)最常用的術(shù)語(yǔ)和基本概念:數(shù)據(jù)疑故、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)弯菊。
1. 數(shù)據(jù)
數(shù)據(jù)是數(shù)據(jù)庫(kù)中存儲(chǔ)的基本對(duì)象纵势。數(shù)據(jù)在大多數(shù)人的腦海中,第一反應(yīng)就是數(shù)據(jù),例如23钦铁,45软舌,-90等等,其實(shí)數(shù)字只是最簡(jiǎn)單的一種數(shù)據(jù)牛曹,是數(shù)據(jù)結(jié)構(gòu)的一種傳統(tǒng)和狹義的理解佛点。數(shù)據(jù)的準(zhǔn)確定義:描述事物的符號(hào)記錄稱為數(shù)據(jù)。描述事物的符號(hào)可以是數(shù)字黎比,也可以是文字超营、圖形、圖像阅虫、聲音演闭、語(yǔ)言等,數(shù)據(jù)有多重表現(xiàn)形式书妻,他們都可以經(jīng)過(guò)數(shù)字化后存入計(jì)算機(jī)船响。
2. 數(shù)據(jù)庫(kù)(DB)
數(shù)據(jù)庫(kù),顧名思義躲履,是存放數(shù)據(jù)的倉(cāng)庫(kù)见间。只不過(guò)這個(gè)倉(cāng)庫(kù)是在計(jì)算機(jī)存儲(chǔ)設(shè)備上,而且數(shù)據(jù)是按一定的格式存放的工猜。
嚴(yán)格地講米诉,數(shù)據(jù)庫(kù)是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)、有組織的篷帅、可共享的大量數(shù)據(jù)的集合史侣。數(shù)據(jù)庫(kù)中的數(shù)據(jù)按一定的數(shù)據(jù)模型組織、描述和儲(chǔ)存魏身,具有較小的冗余度惊橱,較高的數(shù)據(jù)獨(dú)立性和易擴(kuò)展性,并可為各種用戶共享箭昵。
數(shù)據(jù)庫(kù)的三個(gè)基本特點(diǎn):永久存儲(chǔ)税朴、有組織和可共享。
3. 數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)
了解了數(shù)據(jù)和數(shù)據(jù)庫(kù)的概念家制,下一個(gè)問(wèn)題就是如何科學(xué)地的組織和存儲(chǔ)數(shù)據(jù)正林,如何高效地獲取和維護(hù)數(shù)據(jù)。完成這個(gè)任務(wù)的是一個(gè)系統(tǒng)軟件 - 數(shù)據(jù)庫(kù)管理系統(tǒng)颤殴。
數(shù)據(jù)庫(kù)管理系統(tǒng)是位于用戶和操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件笑跛。
4. 數(shù)據(jù)庫(kù)系統(tǒng)(DBS)
數(shù)據(jù)庫(kù)系統(tǒng)是指在計(jì)算機(jī)系統(tǒng)中引入數(shù)據(jù)后的系統(tǒng)叉瘩,一般由數(shù)據(jù)庫(kù)混蔼、數(shù)據(jù)庫(kù)管理系統(tǒng)(及其開(kāi)發(fā)工具)、應(yīng)用系統(tǒng)帖蔓、數(shù)據(jù)庫(kù)管理員構(gòu)成。應(yīng)該指出的是蝇棉,數(shù)據(jù)庫(kù)的建立讨阻、使用和維護(hù)等工作只靠一個(gè)DBMS遠(yuǎn)遠(yuǎn)不夠,還要有專門的人員來(lái)完成篡殷,這些人被稱為數(shù)據(jù)庫(kù)管理員。
我們大都把數(shù)據(jù)庫(kù)系統(tǒng)簡(jiǎn)稱為數(shù)據(jù)庫(kù)埋涧。
二板辽、關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)
1. 常用數(shù)據(jù)庫(kù)
下面我們就來(lái)看下關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)有何不同,又分別有什么樣子的應(yīng)用場(chǎng)景棘催。
2. 關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系型數(shù)據(jù)庫(kù)最典型的數(shù)據(jù)結(jié)構(gòu)是表劲弦,由二維表及其之間的聯(lián)系所組成的一個(gè)數(shù)據(jù)組織。
0. 適用場(chǎng)景
日志醇坝、埋點(diǎn)邑跪、論壇、博客等
1. 優(yōu)點(diǎn)
1呼猪、易于維護(hù):都是使用表結(jié)構(gòu)画畅,格式一致;
2宋距、使用方便:SQL語(yǔ)言通用轴踱,可用于復(fù)雜查詢;
3谚赎、復(fù)雜操作:支持SQL淫僻,可用于一個(gè)表以及多個(gè)表之間非常復(fù)雜的查詢。
2. 缺點(diǎn)
1壶唤、讀寫(xiě)性能比較差雳灵,尤其是海量數(shù)據(jù)的高效率讀寫(xiě);
2闸盔、固定的表結(jié)構(gòu)悯辙,靈活度稍欠;
3蕾殴、高并發(fā)讀寫(xiě)需求笑撞,傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)來(lái)說(shuō),硬盤I/O是一個(gè)很大的瓶頸钓觉。
3. 非關(guān)系型數(shù)據(jù)庫(kù)
非關(guān)系型數(shù)據(jù)庫(kù)嚴(yán)格上不是一種數(shù)據(jù)庫(kù)茴肥,應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)方法的集合,可以是文檔或者鍵值對(duì)等荡灾。
0. 適用場(chǎng)景
所有有邏輯關(guān)系的數(shù)據(jù)存儲(chǔ)瓤狐,like: 大數(shù)據(jù)瞬铸、王彬那邊
1. 優(yōu)點(diǎn)
1、格式靈活:存儲(chǔ)數(shù)據(jù)的格式可以是key,value形式础锐、文檔形式嗓节、圖片形式等等,文檔形式皆警、圖片形式等等拦宣,使用靈活,應(yīng)用場(chǎng)景廣泛信姓,而關(guān)系型數(shù)據(jù)庫(kù)則只支持基礎(chǔ)類型鸵隧。
2、速度快:nosql可以使用硬盤或者隨機(jī)存儲(chǔ)器作為載體意推,而關(guān)系型數(shù)據(jù)庫(kù)只能使用硬盤豆瘫;
3、高擴(kuò)展性菊值;
4外驱、成本低:nosql數(shù)據(jù)庫(kù)部署簡(jiǎn)單,基本都是開(kāi)源軟件腻窒。
2. 缺點(diǎn)
1昵宇、不提供sql支持,學(xué)習(xí)和使用成本較高定页;
2趟薄、無(wú)事務(wù)處理;
3典徊、數(shù)據(jù)結(jié)構(gòu)相對(duì)復(fù)雜杭煎,復(fù)雜查詢方面稍欠。
3. 非關(guān)系型數(shù)據(jù)庫(kù)的分類和比較
1. 文檔性
2. key-value型
3. 列式數(shù)據(jù)庫(kù)
4. 圖形數(shù)據(jù)庫(kù)
三卒落、SQL
SQL集數(shù)據(jù)查詢羡铲、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體儡毕。
下面以關(guān)系型數(shù)據(jù)庫(kù)來(lái)講:
SQL的動(dòng)詞:
SQL功能 動(dòng)詞
數(shù)據(jù)查詢 select
數(shù)據(jù)定義 create也切、drop、alter
數(shù)據(jù)操縱 insert腰湾、update雷恃、delete
數(shù)據(jù)控制 grant、revoke
基本上就是咱們常說(shuō)對(duì)表的的增刪改查费坊,對(duì)數(shù)據(jù)的增刪改查等操作倒槐。
支持SQL的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)同樣支持關(guān)系數(shù)據(jù)庫(kù)三級(jí)模式結(jié)構(gòu),如下圖附井。其中外模式對(duì)應(yīng)于視圖(view)和部分基本表(Base Table)讨越,模式對(duì)應(yīng)于基本表两残,內(nèi)模式對(duì)應(yīng)于存儲(chǔ)文件(Stored File)。
[圖片上傳失敗...(image-9bf58e-1547800615119)]
[圖片上傳中...(SQL對(duì)關(guān)系數(shù)據(jù)庫(kù)模式的支持.jpeg-8cd207-1547801832942-0)]
基本表和視圖一樣把跨,都是關(guān)系人弓。
基本表是笨得很獨(dú)立存在的表,在SQL中一個(gè)關(guān)系就對(duì)應(yīng)一個(gè)基本表着逐。
一個(gè)(或多個(gè))基本表對(duì)應(yīng)一個(gè)存儲(chǔ)文件崔赌,一個(gè)表可以帶若干索引,索引也存放在存儲(chǔ)文件中滨嘱。
視圖是從一個(gè)或幾個(gè)基本表導(dǎo)出的表峰鄙。他本身不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫(kù)中,即數(shù)據(jù)庫(kù)中只存放視圖的定義而不存放視圖對(duì)應(yīng)的數(shù)據(jù)太雨。這些數(shù)據(jù)仍然存放在導(dǎo)出視圖的基本表中,因此視圖是一個(gè)虛表魁蒜。視圖在概念上與基本表等同囊扳。
1. 數(shù)據(jù)定義
關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)支持三級(jí)模式結(jié)構(gòu),其模式兜看、外模式和內(nèi)模式中的基本對(duì)象有表锥咸、視圖和索引。因此SQL的數(shù)據(jù)定義功能包括模式定義细移、表定義搏予、視圖和索引的定義,如下表:
我是用docker啟動(dòng)的數(shù)據(jù)庫(kù)弧轧,這是啟動(dòng)命令:
docker start mysql
1. 定義基本表
ccreate table <表名> (<列名> <數(shù)據(jù)類型> [列級(jí)完整性約束條件])
[,(<列名> <數(shù)據(jù)類型> [列級(jí)完整性約束條件])]
...
如下雪侥,我創(chuàng)建了名為Student
一個(gè)表:
創(chuàng)建一個(gè)“學(xué)生”表 Student
create table Student (
?
Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2),
Sage smallint,
Sdept char(20)
);
創(chuàng)建一個(gè)“課程”表Course
CREATE table Course (
Cno char(4) primary key,
Cname char(40),
Cpno char(4), # Cpnno 的含義是先修課
Ccredit smallint,
FOREIGN key (Cpno) REFERENCES Course (Cno) # 表級(jí)完整性約束條件,Cpno是外碼精绎,
)
建立學(xué)生選課表SC
create table SC (
Sno char(9),
Cno char(4),
Grade smallint,
primary key (Sno, Cno),
FOREIGN key (Sno) REFERENCES Student(Sno),
FOREIGN key (Cno) REFERENCES Course (Cno)
)</pre>
2. 修改基本表
隨著應(yīng)用環(huán)境和應(yīng)用需求的變化速缨,又是需要修改已建立好的基本表,SQL語(yǔ)言用alter table 語(yǔ)句修改基本表代乃,其一般格式為:
alter table <表名>
[add <新列名> <數(shù)據(jù)類型> [完整性約束]]
[drop <完整性約束名>]
[alter column <列名> <數(shù)據(jù)類型>];
alter table Student add Sentrance date;# 向Student表增加“入學(xué)時(shí)間”列旬牲,其數(shù)據(jù)類型為日期型。</pre>
3. 刪除基本表
當(dāng)某個(gè)基本表不再需要時(shí)搁吓,可以使用drop table 語(yǔ)句刪除它原茅。其一般格式為:
drop table <表名> [restrict | cascade]
-
restrict
則該表的刪除是有限制條件的,與刪除的基本表不能被其他表的約束所引用(如堕仔,check,foreign key等約束)擂橘,不能有視圖,不能有觸發(fā)器贮预,不能有存儲(chǔ)過(guò)程或函數(shù)等贝室。
-
cascade
則該表的刪除沒(méi)有限制條件契讲,在刪除基本表的同時(shí),相關(guān)的依賴對(duì)象滑频,例如視圖都將被一起刪除捡偏。
drop table SC
2. 數(shù)據(jù)查詢
數(shù)據(jù)庫(kù)查詢是數(shù)據(jù)庫(kù)的核心操作。SQL提供了select語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)的查詢峡迷,該語(yǔ)句具有靈活的使用方式和豐富的功能银伟。起一般格式為:
select [all | distinct] <目標(biāo)列表達(dá)式>[, <目標(biāo)列表達(dá)式>]... from <表名或視圖名>[, <表名或視圖名>]... [where <條件表達(dá)式>][group by <列名1>[having <條件表達(dá)式>]][order by <列名2> [asc | desc]]
3. 數(shù)據(jù)更新
數(shù)據(jù)更新操作有3種:向表中添加若干行數(shù)據(jù)、修改表中的數(shù)據(jù)和刪除表中的若干行數(shù)據(jù)绘搞。
1. 插入數(shù)據(jù)
SQL的數(shù)據(jù)插入語(yǔ)句insert通常有兩種形式彤避。一種是插入一個(gè)元組,另一種是插入一個(gè)子查詢結(jié)果夯辖。
-
插入元組
insert
into <表名> [ ( <屬性列1> [, <屬性列2> ...)]
values (<常量1>[, <常量2>]...)
插入單條數(shù)據(jù)
insertintoStudent (Sno, Sname, Ssex, Sdept, Sage)
VALUES("200215128", '賀賀', "女", "IS", 28)插入多條數(shù)據(jù)
insertintoStudent (Sno, Sname, Ssex, Sdept, Sage)
VALUES("200215131", '賀賀3', "女", "IS", 28),("200215130", '賀賀2', "女", "IS", 28),("200215132", '賀賀4', "女", "IS", 28)</pre> -
插入子查詢結(jié)果
inser
into <表名> [(<屬性列1> [, <屬性列2> ...])]
子查詢:
2. 修改數(shù)據(jù)
修改操作又稱為更新操作琉预,其語(yǔ)句的一般格式為:
update <表名>
set <列名>=<表達(dá)式>[,<列名>=<表達(dá)式>]...
[where <條件>];
update Student set Sage= 29 where Sno="200215128" # 修改一個(gè)元組
update Student set Sage=Sage+1; # 修改多個(gè)元組
update SC set Grade=0 where 'cs'= (select Sdept from Student s where s.Sno = SC.Sno ) #帶子查詢的修改語(yǔ)句
?</pre>
3. 刪除數(shù)據(jù)
刪除指定表中數(shù)據(jù),表格式保留蒿褂,也就是如果全部刪除表中數(shù)據(jù)圆米,那么表就是一個(gè)沒(méi)有數(shù)據(jù)的空表。刪除語(yǔ)句的一般格式為:
delete
form <表名>
[where <條件>];
delete from Student as s where s.Sno="200215128" # 刪除某一個(gè)元組的值
delete froM Student # 刪除整張表的值</pre>
4. 視圖
視圖是從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表啄栓。它與基本表不同娄帖,是一個(gè)虛表。數(shù)據(jù)庫(kù)中只存放視圖的定義昙楚,而不存放視圖對(duì)應(yīng)的數(shù)據(jù)近速,這些數(shù)據(jù)扔存放在原來(lái)的基本表中。所以基本表中的數(shù)據(jù)發(fā)生變化堪旧,從駛?cè)胫胁樵兂龅臄?shù)據(jù)也就隨之改變了削葱。從這個(gè)意義上講,視圖就像一個(gè)窗口崎场,透過(guò)它可以看到數(shù)據(jù)庫(kù)中自己感興趣的數(shù)據(jù)以及其變化佩耳。
視圖一經(jīng)定義,就可以和基本表一樣被查詢谭跨、被刪除干厚。
四、數(shù)據(jù)庫(kù)的安全性與完整性
數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù)以防止不合法的使用所造成的數(shù)據(jù)泄露螃宙、更改或破壞蛮瞄。
數(shù)據(jù)的完整性和安全性是數(shù)據(jù)庫(kù)保護(hù)的兩個(gè)不同方面。安全性是防止用戶非法使用數(shù)據(jù)庫(kù)谆扎。完整性則是防止合法用戶使用數(shù)據(jù)庫(kù)時(shí)向數(shù)據(jù)庫(kù)中加入不合語(yǔ)義的數(shù)據(jù)挂捅。
數(shù)據(jù)的安全性是指數(shù)據(jù)庫(kù)是否容易攻破。數(shù)據(jù)的完整性是指兩個(gè)表之間的完整連接堂湖。