尚硅谷mysql安裝到mysql高級 數(shù)據(jù)庫概述
第01章_數(shù)據(jù)庫概述
1.1為什么要使用數(shù)據(jù)庫
- 持久化(persistence):把數(shù)據(jù)庫保存到可掉電式存儲設備中以供以后使用。大多數(shù)情況下,特別是企業(yè)級應用,數(shù)據(jù)持久化意味著將內(nèi)存中的數(shù)據(jù)保存到硬盤上加以“固化”,而持久化的實現(xiàn)過程大多數(shù)通過各種關系數(shù)據(jù)庫來完成。
- 持久化的主要作用是將內(nèi)存中的數(shù)據(jù)在關系型數(shù)據(jù)庫中,當然也可以存儲在磁盤文件,XML數(shù)據(jù)文件中。

在內(nèi)存中使用高電平,低電平表示1和0,一旦斷電,內(nèi)存中的數(shù)據(jù)就會丟失。
生活中的例子:

QQ注冊,登陸后,清除掉軟件進程,可以直接登錄,不需要再次注冊。顯然,祖冊后,你的登錄賬號數(shù)據(jù)就被做了持久化。
斷網(wǎng)后,你也可以對有的數(shù)據(jù)進行訪問(看到加載的聊天記錄),也說明對數(shù)據(jù)做了持久化。
2.數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng)
2.1數(shù)據(jù)庫的相關概念
DB:數(shù)據(jù)庫(Database)
? 即存儲數(shù)據(jù)的”倉庫“,其本質(zhì)是一個文件系統(tǒng)。它保存了一系列有組織的數(shù)據(jù)。
DBMS:數(shù)據(jù)庫管理系統(tǒng)(Database Management System)
? 是一種操縱和管理數(shù)據(jù)庫的大型軟件,用于建立、使用和維護數(shù)據(jù)庫,對數(shù)據(jù)庫進行統(tǒng)一管理和控制。用戶通過數(shù)據(jù)庫管理系統(tǒng)訪問數(shù)據(jù)庫中表格內(nèi)的數(shù)據(jù)。
SQL:結構化查詢語言(Structure Query Language)
? 專門用來與數(shù)據(jù)庫通信的語言。
2.2數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng)的關系
數(shù)據(jù)庫管理系統(tǒng)(DBMS)可以管理多個數(shù)據(jù)庫,一般開發(fā)人員會針對每一個應用創(chuàng)建一個數(shù)據(jù)庫。為保存應用中實體的數(shù)據(jù),一i版會在數(shù)據(jù)庫中創(chuàng)建多個表,以保存程序中實體用戶的數(shù)據(jù)。
數(shù)據(jù)庫管理系統(tǒng),數(shù)據(jù)庫和表的關系如圖所示:


2.3常見的數(shù)據(jù)庫管理系統(tǒng)排名(DMS)
目前互聯(lián)網(wǎng)上常見的數(shù)據(jù)庫管理軟件有Oracle,MySQL,MS SQL Server,DB2,PostgreSQL,Access,Sybase,Informix這幾種。一下是20210年DB-Engines Ranking對各數(shù)據(jù)庫受歡迎程度進行調(diào)查后的統(tǒng)計結果:(查看數(shù)據(jù)庫最新排名:http://db-engines.com/en/ranking)

對應的走勢圖:(https://db-engines.com/en/ranking_trend)

2.4常見的數(shù)據(jù)庫介紹
Oracle
1979年,Oracle 2誕生,他是第一個商用的RDBMS(關系型數(shù)據(jù)庫管理體統(tǒng))。隨著Oracle軟件的名氣越來越大,公司也改名叫Oracle公司。
2007年,總計85億美元收購BEA Systems。
2009年,總計74億美元收購SUN,此前的2008年,SUN公司以10億美元收購MySQL。意味著Oracle同時擁有了MySQL的管理權,至此Oracle在數(shù)據(jù)庫領域中成為絕對的領導者。
2013年,甲骨文超越IBM,成為即Microsoft后全球第二大軟件公司。
如今Oracle的年收入達到了400億美元,足以證明商用(收費)數(shù)據(jù)庫軟件的價值。
SQL Server
SQL Servcer 是微軟開發(fā)的大型商業(yè)數(shù)據(jù)庫,誕生于1989年。C#、.net等語言常使用,與WinNT完全集成,也可以很好的與Microsoft BackOffic產(chǎn)品集成。
DB2
IBM公司的數(shù)據(jù)庫產(chǎn)品,收費的。常應用在銀行系統(tǒng)中。
PostgreSQL
PostgreSQL的穩(wěn)定性極強,最符合SQL標準,開房源碼,具備商業(yè)及DBMS質(zhì)量。PG對數(shù)據(jù)量打的文本以及SQL處理較快。
SyBase
已經(jīng)淡出歷史舞臺。提供了一個非常專業(yè)數(shù)據(jù)建模的工具PowerDesigner。
SQLite
嵌入式的小型數(shù)據(jù)庫,應用在手機端。零配置,SQLite3不用安裝,不用配置,不用啟動,關閉或者配置數(shù)據(jù)庫實例。當系統(tǒng)崩潰后不用做任何恢復操作,在下次使用數(shù)據(jù)庫的時候自動恢復。
Informix
IBM公司出品,取自Information和Unix的結合,它是第一個被移植到Linux上的商業(yè)數(shù)據(jù)庫產(chǎn)品。進運行與unix/linux平臺,命令行操作。性能較高支持集群適應于安全性要求極高的系統(tǒng),尤其是銀行,證券系統(tǒng)的應用。
3.MySQL介紹

3.1概述
-
MySQL是一個開放源代碼的關系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB(創(chuàng)始人Michael Widenius)公司1995年開發(fā),迅速成為開源數(shù)據(jù)庫的NO.1.
-
2008年被Sun收購(10億美金),2009年SUN公司被Oracle收購。Maria DB應運而生。(MySQL的常見這擔心MySQL有閉源的風險,因此常見了MySQL的認知項目Maria DB)
-
MySQL 6.x版本之后分為社區(qū)版和商業(yè)版。
-
MySQL是一種關聯(lián)數(shù)據(jù)庫管理系統(tǒng),將數(shù)據(jù)保存在不同表中的,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。
-
MySQL是開源的,所以你不需要支付額外的費用。
-
MySQL是可以定制的,采用GPL(GUN General Public License)協(xié)議,你可以修改源代碼開開發(fā)自己de MySQL系統(tǒng)。
-
MySQL支持大型的數(shù)據(jù)庫,可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫。
-
MySQL支持大型數(shù)據(jù)庫,支持5000萬條記錄的數(shù)據(jù)倉庫,32位系統(tǒng)表文件最大支持4 G,64位系統(tǒng) 支持最大的表文件為8 TB。
-
MySQL使用標準的SQL數(shù)據(jù)語言形式
-
MySQL可以允許運行多個系統(tǒng)之上,并且支持多種語言。這些變成語言包括C,C++,Python,Perl,PHP,Ruby等。
3.2MySQL發(fā)展史重大事件
? MySQL的歷史就是整個互聯(lián)網(wǎng)的發(fā)展史。互聯(lián)網(wǎng)業(yè)務從社交領域、電商領域、再到金融領域的發(fā)展,推動者應用對數(shù)據(jù)可的需求提升,對傳統(tǒng)的數(shù)據(jù)庫服務能力提出了挑戰(zhàn)。高并發(fā),高可用,易維護,易擴展的需求,促進了MySQL的長足發(fā)展。


3.3關于MySQL 8.0
MySQL從5.7版主直接跳躍發(fā)布了8.0版本,可見這是一個令人興奮的里程碑版本。MySQL 8版本在功能上做了顯著的改進與增強,開發(fā)者對MySQL的源代碼進行了重構,最突出的一點就是對MySQL Optimizer優(yōu)化器進行了改進重構,不僅在速度上得到了改善,還為用戶帶來了更好的性能和更棒的體驗。
3.4Why choose MySQL?

為什么如此多的廠商要選用MySQL?大概總結的原因主要有以下幾點?
- 開放源代碼,使用成本低
- 性能能卓越,服務穩(wěn)定。
- 軟件體積小,使用簡單,并且易于維護。
- 歷史悠久,社區(qū)用戶非常活躍,遇到問題可以尋求幫助。
- 許多互聯(lián)網(wǎng)公司在用,經(jīng)過了時間的驗證。
3.5Oracle VS MySQL
? Oracle更適合大型跨國企業(yè)的使用,因為他們對費用不敏感,但是對性能要求以及安全性有更高的要求。
? MySQL由于其體積小,速度快,總體擁有成本低,可處理上千萬條記錄的大型數(shù)據(jù)庫,尤其是開房源碼這一特點,是的互聯(lián)網(wǎng)公司,中小型網(wǎng)站選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫(Facebook,Twitter,You Tube,阿里巴巴/螞蟻金服,去哪兒,美團外賣,騰訊)。
4.RDBMS和非RDBMS
? 從排名中我們 能看出來,關系型數(shù)據(jù)庫絕對是DBMS的主流,其中使用最多的是DBMS分別是Oracle、MySQL和SQL Server。這些都是關系型數(shù)據(jù)庫(RDBMS)。
4.1關系型數(shù)據(jù)庫(RDBMS)
4.1.1實質(zhì)
- 這種類型的數(shù)據(jù)是最古老的數(shù)據(jù)庫類型,關系型熟即可模型是把復雜的數(shù)據(jù)結構歸結為簡單的二元關系(即二維表格數(shù)據(jù)形式)。

-
關系性數(shù)據(jù)庫以行(row)和列(column)的形式存儲數(shù)據(jù),以便于用戶理解。這一塊系列的行和列被稱為表(table),一組表組成了一個庫(database)。
例子:

-
表和表之間的數(shù)據(jù)記錄有關系(relationship)。實現(xiàn)世界中的各種實體以及實體之間的各種聯(lián)系均用關系模型來表示。關系型數(shù)據(jù)庫,就是建立在關系模型基礎上的數(shù)據(jù)庫。
-
SQL就是關系型數(shù)據(jù)庫的查詢語言。

4.1.2優(yōu)勢
-
復雜查詢
可以用SQL語句方便的在一個表以及多個表之間做非常復雜的數(shù)據(jù)查詢。
-
事務支持
使得對于安全性能很高得數(shù)據(jù)訪問要求得以實現(xiàn)。
4.2非關系型數(shù)據(jù)庫(非RDBMS)
4.2.1介紹
? 非關系型數(shù)據(jù)庫,可以看成傳統(tǒng)關系型數(shù)據(jù)庫的閹割版本,基于鍵值對存儲數(shù)據(jù),不需要經(jīng)過SQL層的解析,性能非常高。同時,通過減少不常用的功能,進一步提高性能。
? 目前基本上大部分主流的非關系型數(shù)據(jù)庫都是免費的。
4.2.2有哪些非關系型數(shù)據(jù)庫
? 相比于SQL,NoSQL泛指非關系型數(shù)據(jù)庫,包括了榜單上的簡直數(shù)據(jù)庫、文檔型數(shù)據(jù)庫、搜索引擎和列存儲等,除此之外還包括圖形數(shù)據(jù)庫,也只有用NoSQL一詞才能將這些技術囊括進來。
鍵值型數(shù)據(jù)庫
? 鍵值型數(shù)據(jù)庫通過Key-Value鍵值的方式來存儲數(shù)據(jù),其中Key和Value可以是簡單的對象,也可以是復雜的對象。Key作為唯一的標識符,有點事查找速度快,在這方面明顯優(yōu)于關系型數(shù)據(jù)庫,缺點是無法像關系型數(shù)據(jù)庫一樣使用條件過濾(比如WHERE),如果你不知道去哪里找數(shù)據(jù),就要遍歷所有的鍵,這就會消耗大量的計算。鍵值型數(shù)據(jù)庫典型的使用場景就是作為內(nèi)存緩存。Redis是最流行的鍵值型數(shù)據(jù)庫。

文檔型數(shù)據(jù)庫
? 此類數(shù)據(jù)庫可存放并獲取文檔,可以是XML,JSON等格式。在數(shù)據(jù)庫中文檔作為梳理信息的基本單位,一個文檔就相當于一條記錄。文檔數(shù)據(jù)庫所存放文檔,就相當于建筑數(shù)據(jù)所存放的‘’值‘。MangoDB是最流行的文檔型數(shù)據(jù)庫。此外。還有CouchDB等。
搜索引擎數(shù)據(jù)庫
雖然關系型數(shù)據(jù)庫采用了索引提升檢索效率,但是針對全文索引效率卻較低。搜索引擎數(shù)據(jù)庫是應用在搜索引擎領域的數(shù)存儲形式。由于搜索引擎會爬取大量的數(shù)據(jù),并以特定格式進行存儲,這樣在檢索的時候才能保證性能最優(yōu)。核心原理是”倒排索引“
典型產(chǎn)品:Solr、Elasticsearch,、Splunk等
列式數(shù)據(jù)庫
? 列示數(shù)據(jù)庫是相對于行式存儲的數(shù)據(jù)庫,Oracle、MySQL、SQL server等數(shù)據(jù)庫都是擦啟用的行式存儲(Row-based),而列式存儲是將數(shù)據(jù)按照列存儲到數(shù)據(jù)庫中,這樣做的好處就是可以大量降低系統(tǒng)的I/O,適合于分布式文件系統(tǒng),不足在于功能相對有限。典型產(chǎn)品:HBase等。

? 數(shù)據(jù)庫常用的操作就是查詢操作,行式存儲要把每一行的數(shù)據(jù)都要加載到內(nèi)存中,加載了大量的冗余字段,加載到內(nèi)存中的字段越多,它占用的內(nèi)存就越多,占用的內(nèi)存越多,就意味著我們在加載的無用數(shù)據(jù)就越多,就意味著我們進行了比較多的I/O操作。
圖形數(shù)據(jù)庫
? 圖形數(shù)據(jù)庫,利用了圖這種數(shù)據(jù)結構存儲了實體(對象)之間的關系。圖形數(shù)據(jù)庫最典型的例子就是社交網(wǎng)絡中人與人的關系,數(shù)據(jù)模型主要是以節(jié)點和邊(關系)來實現(xiàn),特點在于能高效地解決復雜的關系問題。
? 圖形數(shù)據(jù)庫,顧名思義,就是一種存儲圖形關系的數(shù)據(jù)庫。它利用了圖這種數(shù)據(jù)結構存儲了實體(對象)之間的關系。關系型數(shù)據(jù)庫用于存儲明確關系的數(shù)據(jù),但對于復雜關系的數(shù)據(jù)存儲卻有些力不從心。如社交網(wǎng)絡中任務之間的關系,如果用關系型數(shù)據(jù)庫則非常復雜,用圖形數(shù)據(jù)庫將非常簡單。典型產(chǎn)品:Neo4J、InfoGrid等。

4.2.3非關系型數(shù)據(jù)庫的演變
? 由于SQL一直稱霸DBMS,因此許多人在思考是否有一種數(shù)據(jù)庫技術能遠離SQL,于是NoSQL誕生了。但是隨著發(fā)展卻發(fā)現(xiàn)越來越離不開SQL。到目前為止NoSQL陣營中的DBMS都會有實現(xiàn)類似的SQL的功能。下面是“NoSQL”這個名詞在不同時期的詮釋,從這些釋義的變化中可以看出NoSQL功能的演變:
1970 : NoSQL = We have no SQL
1980 : NoSQL = Know SQL
2000 : NoSQL = No SQL!
2005 : NoSQL = Not only SQL
2013 : NoSQL = No,SQL!
? NoSQL對SQL做出了很好的補充,比如實際開發(fā)中,很多業(yè)務需求,其實并不需要完整的關系型數(shù)據(jù)庫功能,非關系型數(shù)據(jù)庫的功能就足夠使用了。這種情況下,使用性能更高,成本更低的非關系型數(shù)據(jù)庫當然是更明智的選擇。比如:日志收集,排行榜,定時器等。
4.3小結
NoSQL的分類很多,即便如此,在DBMS排名中,還是SQL陣營的比重更大,影響力前5的DBMS中有4個是關系型數(shù)據(jù)庫,而排名前20的DBMS中也有12個是關系型數(shù)據(jù)庫。所以說,掌握SQL是非常有必要的。整套課程將圍繞SQL展開。
5.關系型數(shù)據(jù)庫設計規(guī)則
- 關系型數(shù)據(jù)庫的典型數(shù)據(jù)結構就是數(shù)據(jù)表,這些數(shù)據(jù)表的組成都是結構化的(Strucked)。
- 將數(shù)據(jù)放到表中,表在放到庫中。
- 一個數(shù)據(jù)庫中可以有多個表,每個表中都有一個名字,用來表示自己。表名具有唯一性。
- 表具有一些特性,這些特性定義了數(shù)據(jù)在表中如何存儲,類四Java和Python中“類”的設計
5.1表、記錄、字段
- E-R(entity-relationship 實體聯(lián)系)模型中有三個主要的概念是:實體集、屬性、聯(lián)系集。
- 一個實體集(class)對應于數(shù)據(jù)庫中的一個表(table),一個實體(instance)則對應于數(shù)據(jù)庫中的一行(row),也稱為一條記錄(record)。一個屬性(attribute)對應于數(shù)據(jù)庫表中的一列(column),也稱為一個字段(field)。

ORM思想(object Relational Mapping)
數(shù)據(jù)庫中的一個表 <----> Java或Python中的一個類
表中的一行數(shù)據(jù) <----> 類中的一個對象(或?qū)嶓w)
表中的一個列 <----> 類中的一個字段、屬性(field)
5.2表的關聯(lián)關系
- 表與表之間的數(shù)據(jù)記錄有關系(relationship)。現(xiàn)實世界中的各種實體以及實體之間的各種聯(lián)系各種關系模型來表示。
- 四種:一對一關聯(lián),一對多關聯(lián),多對多關聯(lián),自我引用。
5.2.1一對一關聯(lián)(one-to-one)
-
在實際的開房中應用不多,因為一對一可以創(chuàng)建成一張表。
-
舉例:設計學生表:學號、姓名、手機號碼、班級、系別、身份賬號、家庭住址、籍貫、緊急聯(lián)系人......
- 拆為兩個表:兩個表的記錄是一一對應關系
- 基礎信息表(常用信息):學號、姓名、手機號碼、班級、系別
- 檔案信息表(不常用信息):學號、身份證號碼、家庭住址,籍貫,緊急聯(lián)系人、...
-
兩種建表原則
- 外鍵唯一:主表的主鍵和從表的外鍵(唯一),形成外逐漸關系,外鍵唯一。
- 外鍵是主鍵:主表的主鍵和從表的主鍵,形成主外鍵關系。

5.2.2一對多關系(one-to-many)
-
常見實例場景:客戶表和訂單表,分類表和商品表,部門表和員工表。
-
距離:
- 員工表:編號、姓名、...、所屬部門
- 部門表:編號、名稱、簡介
-
一對多建表原則:在從表(多方)創(chuàng)建一個字段,字段作為外鍵只想主表(一方)的主鍵


5.2.3多對多(many-to-many)
? 要表示多對多關系,必須創(chuàng)建第三個表,該表通常稱為聯(lián)接表,它將多對多關系劃分為兩個一對多關系。將這兩個表的主鍵都插入到第三個表中。

- 舉例1:學生-課程
- 學生信息表:一行代表一個學生的信息(學號、姓名、手機號碼、班級、系別...)
- 課程信息表:一行代表一個課程的信息(課程編號、授課老師、簡介...)
- 選課信息表:一個學生可以選多門課,一門課可以被多個學生選擇
學號 課程編號
1 1001
2 1001
1 1002
-
舉例2:產(chǎn)品-訂單
“訂單”表和”產(chǎn)品“表有一種多對多的關系,這種關系是通過于“訂單明細”表戰(zhàn)力兩個一對多關系來定義的。一個訂單可以有多個產(chǎn)品,每個產(chǎn)品可以出現(xiàn)在多個訂單中。
- 產(chǎn)品表:”產(chǎn)品“表中的每條記錄表示一個產(chǎn)品。
- 訂單表:”訂單“表中的每條記錄表示一個訂單
- 訂單明細表:每個產(chǎn)品可以與”訂單“表中的多條記錄對應,即出現(xiàn)多個訂單中。一個訂單可以與”產(chǎn)品“表中的多條記錄對應。即包含多個產(chǎn)品。

-
舉例三:用戶-角色
-
多對多關系建表原則:需要創(chuàng)建第三張表,中間表中至少兩個字段,這兩個字段分別作為外鍵指向各自一方的主鍵。

5.3.4自我引用(Self reference)


浙公網(wǎng)安備 33010602011771號