MySQL 數(shù)據(jù)庫簡介
1. 數(shù)據(jù)庫的概念
數(shù)據(jù)庫是一個(gè)長期存儲(chǔ)在計(jì)算機(jī)內(nèi)的、有組織的、有共享的、統(tǒng)一管理的數(shù)據(jù)集合。是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲(chǔ)和管理數(shù)據(jù)的倉庫。目前常用的數(shù)據(jù)庫主要分為開源 MySQL 數(shù)據(jù)庫(包括官方版 MySQL、Percona MySQL MariDB)和商業(yè)版數(shù)據(jù)庫 ( 包括 SQL Server、Oracle、DB2 )。
例如一個(gè)學(xué)校全部學(xué)生學(xué)籍信息、選課情況、學(xué)分統(tǒng)計(jì)、考試成績查詢都是利用數(shù)據(jù)庫對學(xué)校相關(guān)數(shù)據(jù)進(jìn)行管理和存儲(chǔ)的,而數(shù)據(jù)庫則是配置在學(xué)校機(jī)房服務(wù)器的,利用數(shù)據(jù)庫技術(shù)可以對這些數(shù)據(jù)進(jìn)行管理,以便于教學(xué)工作高效、有序的開展。
而數(shù)據(jù)庫又按照是否采用關(guān)系模型劃分為兩種:
- 關(guān)系型數(shù)據(jù)庫
- 非關(guān)系型數(shù)據(jù)庫
1.1 關(guān)系型數(shù)據(jù)(SQL)
關(guān)系型數(shù)據(jù)庫,是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫,從語言功能層面來講,一般是指用 SQL 語言來進(jìn)行操作管理的關(guān)系型數(shù)據(jù)庫。常用的關(guān)系型數(shù)據(jù)庫有 MySQL、Oracle、SQLServer、PostGreSQL。
1.2 非關(guān)系型數(shù)據(jù)庫(NoSQL)
NoSQL 通常指的是 non-relational ,也可以理解為 Not Only SQL,泛指非關(guān)系型數(shù)據(jù)庫。常見的非關(guān)系型數(shù)據(jù)庫有 MongDB、HBase、Redis。
1.3 新型數(shù)據(jù)庫(NewSQL)
NewSQL 是對各種新的可擴(kuò)展/高性能數(shù)據(jù)庫的簡稱,這類數(shù)據(jù)庫不僅具有 NoSQL 對海量數(shù)據(jù)的存儲(chǔ)管理能力,還保持了傳統(tǒng)數(shù)據(jù)庫支持 ACID 和 SQL 等特性。常見的 NewSQL 有 Google Spanner/F1、阿里 OceanBase、騰訊 TDSQL、TiDB、Cockroach。
2. MySQL 發(fā)展歷史
-
1979 年,MySQL 的歷史最早可以追溯到 1979 年,有一個(gè)人叫 Monty Widenius 在一個(gè)名為 TcX 的小公司打工并用 BASIC 設(shè)計(jì)了一個(gè)報(bào)表工具,可以在 4M 主頻和 16KB 內(nèi)存的計(jì)算機(jī)上運(yùn)行。過了不久,又將此工具使用 C 語言重寫,移植到 Unix 平臺,當(dāng)時(shí),它只是一個(gè)很底層的面向報(bào)表的存儲(chǔ)引擎;
-
1996 年,MySQL 1.0 發(fā)布,只面向一小撥人,相當(dāng)于內(nèi)部發(fā)布。到了 96 年 10 月,MySQL 3.11.1 發(fā)布了;
-
1999 - 2000 年,有一家公司在瑞典成立了,叫 MySQL AB (AB 是瑞典語“股份公司”的意思)。 雇了幾個(gè)人,與 Sleepycat 合作,開發(fā)出了 Berkeley DB 引擎, 因?yàn)?BDB 支持事務(wù)處理,所以,MySQL 從此開始支持事務(wù)處理了;
-
2000 年 4 月,MySQL 對舊的存儲(chǔ)引擎進(jìn)行了整理,命名為 MyISAM。同時(shí),2001 年,Heikiki Tuuri 向 MySQL 提出建議,希望能集成他們的存儲(chǔ)引擎 InnoDB ,這個(gè)引擎同樣支持事務(wù)處理,還支持行級鎖;
-
2004 年 10 月,發(fā)布了經(jīng)典的 4.1 版本。 2005 年 10 月,有發(fā)布了里程碑的一個(gè)版本,MySQL 5.0. 在5.0 中加入了游標(biāo),存儲(chǔ)過程,觸發(fā)器,視圖和事務(wù)的支持。在 5.0 之后的版本里,MySQL 明確地表現(xiàn)出邁向高性能數(shù)據(jù)庫的發(fā)展步伐;
-
2011 年 4 月,MySQL 5.6 發(fā)布,作為被 Oracle 收購后,第一個(gè)正式發(fā)布并做了大量變更的版本(5.5版本主要是對社區(qū)開發(fā)的功能的集成),對復(fù)制模式,優(yōu)化器等做了大量的變更,其中最重要的主從 GTID 復(fù)制模式,大大降低了 MySQL 高可用操作的復(fù)雜性;
-
2016 年 9 月,Oracle 決定跳過 MySQL 5.x 命名系列,并拋棄之前的 MySQL 6,7 兩個(gè)分支(6,7 是兩個(gè)從來沒有對外發(fā)布的兩個(gè)分支),直接進(jìn)入 MySQL 8 版本命名,自此正式進(jìn)入 MySQL 8.0 時(shí)代。
3. MySQL 與同類型數(shù)據(jù)庫對比
3.1 MySQL優(yōu)缺點(diǎn)
MySQL優(yōu)點(diǎn):
-
運(yùn)行速度快:MySQL 體積小,命令執(zhí)行的速度快;
-
使用成本低:MySQL 是開源的,且提供免費(fèi)版本,對大多數(shù)用戶來說大大降低了使用成本;
-
使用容易:與其他大型數(shù)據(jù)庫的設(shè)置和管理相比,其復(fù)雜程度較低,易于使用;
-
可移植性強(qiáng):MySQL 能夠運(yùn)行與多種系統(tǒng)平臺上,如 Windouws,Linux,Unix 等;
-
適用更多用戶:MySQL 支持最常用的數(shù)據(jù)管理功能,適用于中小型企業(yè)甚至大型網(wǎng)站應(yīng)用。
MySQL 缺點(diǎn):
-
MySQL 最大的缺點(diǎn)是其安全系統(tǒng),主要是復(fù)雜而非標(biāo)準(zhǔn),另外只有到調(diào)用 mysqladmin 來重讀用戶權(quán)限時(shí)才發(fā)生改變;
-
MySQL 沒有一種存儲(chǔ)過程(Stored ProcedureStored Procedure)語言,這是對習(xí)慣于企業(yè)級數(shù)據(jù)庫的程序員的最大限制;
-
MySQL不支持熱備份;
-
MySQL 的另一個(gè)主要的缺陷之一是缺乏標(biāo)準(zhǔn)的 RI(Referential Integrity-RI)機(jī)制;Rl 限制的缺乏(在給定字段域上的一種固定的范圍限制)可以通過大量的數(shù)據(jù)類型來補(bǔ)償;
-
MySQL 的價(jià)格隨平臺和安裝方式變化。Linux 的 MySQL 如果由用戶自己或系統(tǒng)管理員而不是第三方安裝則是免費(fèi)的,第三方安裝則必須付許可費(fèi)。Unix 或 Linux 自行安裝是免費(fèi)的,Unix 或 Linux 第三方安裝則需花費(fèi) 200 美元。
3.2 Oracle 優(yōu)缺點(diǎn)
Orace 優(yōu)點(diǎn):
-
開放性:Oracle 能在大部分主流平臺上運(yùn)行(包括 Windows)完全支持所有工業(yè)標(biāo)準(zhǔn)采用完全開放策略使客戶選擇適合解決方案對開發(fā)商全力支持;
-
安全性:獲得最高認(rèn)證級別的 ISO 標(biāo)準(zhǔn)認(rèn)證;
-
Oracle 性能高:保持開放平臺下 TPC-D 和 TPC-C 世界記錄;
-
客戶端支持及應(yīng)用模式:Oracle 多層次網(wǎng)絡(luò)計(jì)算支持多種工業(yè)標(biāo)準(zhǔn)用 ODBC、JDBC、OCI 等網(wǎng)絡(luò)客戶連接;
-
使用風(fēng)險(xiǎn):Oracle 長時(shí)間開發(fā)經(jīng)驗(yàn)完全向下兼容得廣泛應(yīng)用地風(fēng)險(xiǎn)低。
Oracle 缺點(diǎn):
-
對硬件的要求很高;
-
價(jià)格比較昂貴;
-
管理維護(hù)麻煩一些;
-
操作比較復(fù)雜,需要技術(shù)含量較高。
3.3 SQLServer 優(yōu)缺點(diǎn)
SQLServer 優(yōu)點(diǎn):
-
易用性:適合分布式組織的可伸縮性、用于決策支持的數(shù)據(jù)倉庫功能、與許多其他服務(wù)器軟件緊密關(guān)聯(lián)的集成性、良好的性價(jià)比等;
-
數(shù)據(jù)管理與分析帶來了靈活性:允許單位在快速變化的環(huán)境中從容響應(yīng),從而獲得競爭優(yōu)勢。從數(shù)據(jù)管理和分析角度看,將原始數(shù)據(jù)轉(zhuǎn)化為商業(yè)智能和充分利用 Web 帶來的機(jī)會(huì)非常重要;
-
完備的數(shù)據(jù)庫和數(shù)據(jù)分析包:SQLServer 為快速開發(fā)新一代企業(yè)級商業(yè)應(yīng)用程序、為企業(yè)贏得核心競爭優(yōu)勢打開了勝利之門;
-
基準(zhǔn)測試可伸縮性和速度獎(jiǎng)的記錄保持者:SQLServer 是一個(gè)具備完全 Web 支持的數(shù)據(jù)庫產(chǎn)品,提供了對可擴(kuò)展標(biāo)記語言(XML)的核心支持以及在 Internet 上和防火墻外進(jìn)行查詢的能力;
SQLServer 缺點(diǎn):
- 伸縮性并行性:SQL server 并行實(shí)施和共存模型并成熟難處理日益增多用戶數(shù)和數(shù)據(jù)卷伸縮性有限。
- 安全性:沒有獲得任何安全證書;
- 性能 :SQL Server 多用戶時(shí)性能佳 ;
- 客戶端支持及應(yīng)用模式: 客戶端支持及應(yīng)用模式。只支持 C/S 模式,SQL Server C/S 結(jié)構(gòu)只支持 Windows 客戶用 ADO、DAO、OLEDB、ODBC連接;
- 使用風(fēng)險(xiǎn):SQL server 完全重寫代碼經(jīng)歷了長期測試斷延遲許多功能需要時(shí)間來證明并十分兼容。
3.4 MySQL 的市場占比
我們分別在百度指數(shù)中查詢 MySQL,Oracle,和 SQLSever 這三種關(guān)系型數(shù)據(jù)庫的近半年的平均指數(shù),可以看到 MySQL 數(shù)據(jù)庫已經(jīng)遠(yuǎn)超同濟(jì)!
4、MySQL 的版本
MySQL 分為官方版 Mysql、MariaDB 社區(qū)版、Percona 企業(yè)版,其中官方原版高負(fù)載性能一般,兼容性好,MariaDB 繼續(xù)開源,高負(fù)載性能較好,兼容性一般。如圖對比, Percona 企業(yè)版高負(fù)載性能最好,兼容性好。
Percona 版的 MySQL 是 Percona 公司對原版 MySQL 進(jìn)行性能優(yōu)化之后再發(fā)布的版本,其性能比官方原版好,但是 Percona 版的 MySQL 發(fā)布一般要晚于官方原版 MySQL 幾個(gè)月。在企業(yè)生產(chǎn)環(huán)境中,一般推薦使用 Percona 版的 MySQL,對于新手而言,本套教程中則使用 MySQL 官方目前最新版本 MySQL8.0。
5. 為什么要學(xué)習(xí) MySQL?
隨著互聯(lián)網(wǎng)技術(shù)迅猛的發(fā)展,“LNMPR” 一詞被越來越多的人熟悉,其中 “L”、“N”、“M”、“P”、“R"分別代表 “Linux”、“Nginx”、“MySQL”、PHP”、“Redis”,而 LNMPR 是后端開發(fā)工程師必備技能,學(xué)習(xí) LNMPR 相關(guān)技術(shù)也是各大后端開發(fā)工程師提升自己競爭力的有效途徑,而 MySQL 作為各大互聯(lián)網(wǎng)企業(yè)重要的數(shù)據(jù)存儲(chǔ)、管理技術(shù),MySQL 數(shù)據(jù)庫工程師的需求也越來越急迫,特別是對有經(jīng)驗(yàn)的優(yōu)秀人才需求量巨大。
6. 學(xué)習(xí)基礎(chǔ)
學(xué)習(xí)本套教程之前您需要先了解以下幾點(diǎn):
- 了解一些基礎(chǔ)的 Linux 命令;
- 需要安裝數(shù)據(jù)庫連接操作工具,如 Navicat。