MySQL筆記01: MySQL入門_1.1 MySQL概述

1.1 MySQL概述

MySQL是一個關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational DataBase Management System,RDBMS)。它是一個程序,可以存儲大量的種類繁多的數(shù)據(jù),并且提供服務(wù)以滿足任何組織的需要。與MySQL同屬于RDBMS的還有著名的Oracle、SQL Server和DB2。

? 1.1.1 MySQL發(fā)展歷史

MySQL的歷史最早可以追溯到1979年,當(dāng)時有一個名叫Monty Widenius的程序員在名為TcX的小公司打工,并且使用BASIC設(shè)計了一個報表工具,使其可以在4MB主頻和16KB內(nèi)存的計算機上運行。沒過多久,Monty又將此工具用C語言進行了重寫并移植到了UNIX平臺。當(dāng)時,這只是一個很底層的且僅面向報表的存儲引擎,名叫Unireg。

1985年,瑞典幾位志同道合的年輕人(以David Axmark為首)成立了一家公司,這就是MySQL AB?的前身。這個公司最初并不是為了開發(fā)數(shù)據(jù)庫產(chǎn)品,而是在實現(xiàn)他們想法的過程中,需要一個數(shù)據(jù)庫。他們希望能夠使用開源的產(chǎn)品。但在當(dāng)時并沒有一個合適的選擇,那就只能自己開發(fā)了。

在最初,他們只是自己設(shè)計了一個利用索引順序存取數(shù)據(jù)的方法,也就是I S A M(Indexed Sequential Access Method)存儲引擎核心算法的前身,利用ISAM結(jié)合mSQL來實現(xiàn)他們的應(yīng)用需求。在系統(tǒng)使用過程中,隨著數(shù)據(jù)量越來越大,系統(tǒng)復(fù)雜度越來越高,ISAM和mSQL的組合逐漸不堪重負(fù)。在分析性能瓶頸之后,他們發(fā)現(xiàn)問題出在mSQL上面。不得已,他們拋棄了mSQL,重新開發(fā)了一套功能類似的數(shù)據(jù)存儲引擎,這就是ISAM?存儲引擎。

1990年,TcX公司的客戶中開始有人要求為他的API提供SQL支持。當(dāng)時有人提議直接使用商用數(shù)據(jù)庫,但是Monty覺得商用數(shù)據(jù)庫的速度難以令人滿意。于是,他直接借助于MySQL的代碼,將它集成到自己的存儲引擎中。令人失望的是,效果并不太令人滿意,于是,Monty決心自己重寫一個SQL支持。

1996年,MySQL 1.0版本發(fā)布,可以在小范圍內(nèi)使用。到了1996年10月,MySQL 3.11.1版本發(fā)布,沒有2.x版本,最開始只提供了Solaris下的二進制版本。一個月后,Linux版本出現(xiàn)了。這時的MySQL還非常簡陋,除了在一個表上做一些INSERT、UPDATE、DELETE和SELECT操作外,沒有其他更多的功能。

緊接下來的兩年里,MySQL被依次移植到各個平臺。它在發(fā)布時采用的許可策略有些與眾不同:允許免費使用,但是不能將MySQL與自己的產(chǎn)品綁定在一起發(fā)布。如果想一起發(fā)布,就必須使用特殊許可,這就意味著用戶要“付費”。這種特殊許可為MySQL帶來了一些收入,從而為它的持續(xù)發(fā)展提供了物質(zhì)基礎(chǔ)。

MySQL關(guān)系型數(shù)據(jù)庫于1998年1月發(fā)行第一個版本。它使用系統(tǒng)核心的多線程機制提供完全的多線程運行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等編程語言的編程接口(API)。支持多種字段類型,并提供了完整的操作符支持。

1999—2000年,MySQL AB公司在瑞典成立。Monty與Sleepycat合作開發(fā)出了Berkeley DB(簡稱為BDB)引擎,由于BDB支持事務(wù)處理,所以MySQL從此開始支持事務(wù)處理了。

2000年的時候,MySQL公布了自己的源代碼,并采用GPL(GNU General Public License)許可協(xié)議,正式進入開源世界。2000年4月,MySQL對舊的存儲引擎ISAM進行了整理,將其命名為MyISAM。

2001年,Heikiki Tuuri向MySQL提出建議,希望能集成他們的存儲引擎InnoDB,這個引擎同樣支持事務(wù)處理,還支持行級鎖。所以在2001年發(fā)布的3.23版本的時候,該版本已經(jīng)支持大多數(shù)的基本的SQL操作,而且還集成了MyISAM和InnoDB存儲引擎。MySQL與InnoDB的正式結(jié)合版本是4.0。

2004年10月,發(fā)布了經(jīng)典的4.1版本。

2005年10月,有發(fā)布了里程碑的一個版本,MySQL 5.0?在5.0中加入了游標(biāo)、存儲過程、觸發(fā)器、視圖和事務(wù)的支持。在5.0之后的版本里,MySQL明確地表現(xiàn)出邁向高性能數(shù)據(jù)庫的發(fā)展步伐。

2008年1月,MySQL AB公司被Sun公司以10億美金收購,MySQL數(shù)據(jù)庫進入Sun時代。在Sun時代,Sun公司對其進行了大量的推廣、優(yōu)化和Bug修復(fù)等工作。

2008年11月,MySQL 5.1發(fā)布,它提供了分區(qū)、事件管理,以及基于行的復(fù)制和基于磁盤的NDB集群系統(tǒng),同時修復(fù)了大量的Bug。

2009年4月,甲骨文以74億美元收購Sun公司,自此MySQL數(shù)據(jù)庫進入Oracle時代,而其第三方的存儲引擎InnoDB早在2005年就被甲骨文收購。

2010年12月,MySQL 5.5發(fā)布,其主要新特性包括半同步的復(fù)制及對SIGNAL/RESIGNAL的異常處理功能的支持,最重要的是InnoDB存儲引擎終于變?yōu)楫?dāng)前MySQL的默認(rèn)存儲引擎。MySQL 5.5不是時隔兩年后的一次簡單的版本更新,而是加強了MySQL各個方面在企業(yè)級的特性。甲骨文公司同時也承諾MySQL 5.5和未來版本仍是采用GPL授權(quán)的開源產(chǎn)品。


? 1.1.2 MySQL主要特性

下面列出了MySQL數(shù)據(jù)庫的一些主要特性。

(1)內(nèi)部構(gòu)件和可移植性。

(2)使用C和C++編寫。

(3)用眾多不同的編譯器進行了測試。

(4)能夠工作在眾多不同的平臺上。

(5)使用GNU Automake、Autoconf和Libtool進行移植。

(6)提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl的API。

(7)采用核心線程的完全多線程,如果有多個CPU,它能方便地使用這些CPU。

(8)提供了事務(wù)性和非事務(wù)性存儲引擎。

(9)使用了極快的“B樹”磁盤表(MyISAM)和索引壓縮。

(10)添加另一個存儲引擎相對簡單。如果打算為內(nèi)部數(shù)據(jù)庫添加一個SQL接口,該特性十分有用。

(11)極快的基于線程的內(nèi)存分配系統(tǒng)。

(12)通過使用優(yōu)化的“單掃描多連接”,能實現(xiàn)極快的連接。

(13)存儲器中的哈希表用作臨時表。

(14)SQL函數(shù)是使用高度優(yōu)化的類庫實現(xiàn)的,運行很快。通常,在完成查詢初始化后,不存在存儲器分配。

(15)服務(wù)器可作為單獨程序運行在客戶/服務(wù)器聯(lián)網(wǎng)環(huán)境下。它也可作為庫提供,可嵌入(鏈接)到獨立的應(yīng)用程序中。這類應(yīng)用程序可單獨使用,也能在網(wǎng)絡(luò)環(huán)境下使用。

(16)眾多類型:

帶符號/無符號整數(shù),1、2、3、4、8字節(jié)長,F(xiàn)LOAT,DOUBLE,CHAR,VARCHAR,TEXT,BLOB,DATE,TIME,DATETIME,TIMESTAMP,YEAR,SET,ENUM,以及OpenGIS空間類型。

(17)在SELECT查詢的WHERE子句中,提供完整的操作符和函數(shù)支持。例如:

mysql>SELECTCONCAT(first_name,'', last_name)

? ? ? ? ->FROM citizen

? ? ? ? ->WHEREincome/dependents>10000ANDage>30;


(18)對SQL GROUP BY和ORDER BY子句的全面支持。支持聚合函數(shù)COUNT(),COUNT(),AVG(),STD(),SUM(),MAX()和MIN()等。

(19)支持LEFT OUTER JOIN和RIGHT OUTER JOIN,采用標(biāo)準(zhǔn)的SQL和ODBC語法。

(20)MySQL的SHOW命令可用于檢索關(guān)于數(shù)據(jù)庫、數(shù)據(jù)庫引擎、表和索引的信息。EXPLAIN命令可用于確定優(yōu)化器處理查詢的方式。

(21)函數(shù)名與表名或列名不沖突。例如,ABS是有效的列名。唯一的限制在于,調(diào)用函數(shù)時,函數(shù)名和隨后的符號“(”之間不得有空格。

(22)十分靈活和安全的權(quán)限和密碼系統(tǒng),允許基于主機的驗證。連接到服務(wù)器時,所有的密碼傳輸均采用加密形式,從而保證了密碼安全。

(23)處理大型數(shù)據(jù)庫:

有用戶使用MySQL服務(wù)器包含5千萬條記錄的數(shù)據(jù)庫,有些用戶將MySQL用于包含60000個表和約50億行的數(shù)據(jù)庫。

(24)每個表可支持高達64條索引(在MySQL 4.1.2之前為32條)。每條索引可由1~16個列或列元素組成。最大索引寬度為1000字節(jié)(在MySQL 4.1.2之前為500)。索引可使用具備CHAR、VARCHAR、BLOB或TEXT列類型的列前綴。

(25)在任何平臺上,客戶端可使用TCP/IP協(xié)議連接到MySQL服務(wù)器。在Windows系統(tǒng)的NT系列中(NT、2000、XP或2003),客戶端可使用命名管道進行連接。在UNIX系統(tǒng)中,客戶端可使用UNIX域套接字文件建立連接。

(26)對數(shù)種不同字符集的全面支持,包括latin1(cp1252)、german、big5、ujis等。例如,在表名和列名中允許使用斯堪的納維亞字符‘?’、‘?’和‘?’。從MySQL 4.1開始,提供了Unicode支持。

(27)所有數(shù)據(jù)均以所選的字符集保存。正常字符串列的比較不區(qū)分大小寫。

(28)MySQL服務(wù)器提供了對SQL語句的內(nèi)部支持,可用于檢查、優(yōu)化和修復(fù)表。通過mysqlcheck客戶端,可在命令行上使用這類語句。MySQL還包括myisamchk,這是一種很快的命令行實用工具,可用于在MyISAM表上執(zhí)行這類操作。

(29)對于所有MySQL程序,均能通過“--help”或“-?”選項調(diào)用,以獲取聯(lián)機幫助信息。


? 1.1.3 MySQL適用場景

目前,MySQL的使用用戶已經(jīng)達千萬級別了,其中不乏企業(yè)級用戶。可以說是目前最為流行的開源數(shù)據(jù)庫管理系統(tǒng)軟件了。任何產(chǎn)品都不可能是萬能的,也不可能適用于所有的應(yīng)用場景。下面列舉了MySQL最常用到的4種場景。

1. Web網(wǎng)站系統(tǒng)

Web站點是MySQL最大的客戶群,也是MySQL發(fā)展史上最為重要的支撐力量。MySQL之所以能成為Web站點開發(fā)者們最青睞的數(shù)據(jù)庫管理系統(tǒng),是因為MySQL數(shù)據(jù)庫的安裝和配置都非常簡單,使用過程中的維護也不像很多大型商業(yè)數(shù)據(jù)庫管理系統(tǒng)那么復(fù)雜,而且性能出色。還有一個非常重要的原因就是MySQL是開放源代碼的,完全可以免費使用。

2.?日志記錄系統(tǒng)

MySQL數(shù)據(jù)庫的插入和查詢性能都非常高效,如果設(shè)計得較好,在使用MyISAM存儲引擎的時候,兩者可以做到互不鎖定,達到很高的并發(fā)性能。所以,對需要大量的插入和查詢?nèi)罩居涗浀南到y(tǒng)來說,MySQL是非常不錯的選擇。比如處理用戶的登錄日志、操作日志等,都是非常適合的應(yīng)用場景。

3.?數(shù)據(jù)倉庫系統(tǒng)

隨著現(xiàn)在數(shù)據(jù)倉庫數(shù)據(jù)量的飛速增長,需要的存儲空間越來越大。數(shù)據(jù)量的不斷增長,使數(shù)據(jù)的統(tǒng)計分析變得越來越低效,也越來越困難。怎么辦?這里有幾個主要的解決思路,一個是采用昂貴的高性能主機以提高計算性能,用高端存儲設(shè)備提高I/O性能,效果理想,但是成本非常高;第二個就是通過將數(shù)據(jù)復(fù)制到多臺使用大容量硬盤的廉價服務(wù)器上,以提高整體計算性能和I/O能力,效果尚可,存儲空間有一定限制,成本低廉;第三是通過將數(shù)據(jù)水平拆分,使用多臺廉價的服務(wù)器和本地磁盤來存放數(shù)據(jù),每臺機器上面都只有所有數(shù)據(jù)的一部分,解決了數(shù)據(jù)量的問題,所有服務(wù)器一起并行計算,也解決了計算能力問題,通過中間代理程序調(diào)配各臺機器的運算任務(wù),既可以解決計算性能問題又可以解決I/O性能問題,成本也很低廉。

在上面的三個方案中,第二和第三個的實現(xiàn)MySQL都有較大的優(yōu)勢。通過MySQL的簡單復(fù)制功能,可以很好地將數(shù)據(jù)從一臺主機復(fù)制到另外一臺,不僅在局域網(wǎng)內(nèi)可以復(fù)制,在廣域網(wǎng)同樣可以。當(dāng)然,很多人可能會說,其他的數(shù)據(jù)庫同樣也可以做到,不是只有MySQL有這樣的功能。確實,很多數(shù)據(jù)庫同樣能做到,但是MySQL是免費的,其他數(shù)據(jù)庫大多都是按照主機數(shù)量或者CPU數(shù)量來收費,當(dāng)我們使用大量的服務(wù)器的時候,授權(quán)費用相當(dāng)驚人。第一個方案,基本上所有數(shù)據(jù)庫系統(tǒng)都能夠?qū)崿F(xiàn),但是其高昂的成本并不是每一個公司都能夠承擔(dān)的。

4.?嵌入式系統(tǒng)

嵌入式環(huán)境對軟件系統(tǒng)最大的限制是硬件資源非常有限,在嵌入式環(huán)境下運行的軟件系統(tǒng),必須是輕量級低消耗的軟件。MySQL在資源使用方面的伸縮性非常大,可以在資源非常充裕的環(huán)境下運行,也可以在資源非常少的環(huán)境下正常運行。它對于嵌入式環(huán)境來說,是一種非常合適的數(shù)據(jù)庫系統(tǒng),而且MySQL有專門針對于嵌入式環(huán)境的版本。


? 1.1.4 MySQL分支版本

在MySQL的發(fā)展中最初由MySQL AB公司開發(fā),之后被Sun公司收購,再被Oracle公司收購。另外,由于MySQL開源代碼的原因,市場上出現(xiàn)了很多MySQL的分支版本,其中最有代表性的三個,分別是Percona Server、MariaDB和Drizzle。

1. Percona Server

Percona Server是一個與MySQL向后兼容的替代品,它盡可能不改變SQL語法、客戶/服務(wù)器協(xié)議和硬盤上的文件格式。任何運行在MySQL上的數(shù)據(jù)庫都可以運行在Percona Server上而不需要修改。切換到Percona Server的方法也很簡單,只需關(guān)閉MySQL和啟動Percona Server即可,而不需要導(dǎo)出和重新導(dǎo)入數(shù)據(jù),反之切換回去也不麻煩。

Percona Server包括Percona XtraDB存儲引擎,即改進版本的InnoDB。這同樣是一個向后兼容的替代品。例如,如果要創(chuàng)建一個使用InnoDB存儲引擎的表,Percona Server能自動識別并用XtraDB替代之。

2. MariaDB

在Sun收購MySQL之后,MySQL的創(chuàng)建者之一Monty離開Sun公司,隨后成立Monty公司創(chuàng)建了MariaDB。MariaDB的目標(biāo)是社區(qū)開發(fā),Bug修改和許多的新特性(特別是與社區(qū)開發(fā)的特性相集成)。

與Percona Server相比,MariaDB包括更多對服務(wù)器的擴展。例如,有許多是對查詢優(yōu)化和復(fù)制的改變。它使用Aria存儲引擎取代了MyISAM來存儲內(nèi)部臨時表。同時也包括很多社區(qū)的引擎,如SphinxSE和PBXT。

3. Drizzle

Drizzle是真正的MySQL分支,而非只是一個變種或者增強版本。它并不與MySQL兼容,盡管區(qū)分上還并不是太大。在許多場合并不能簡單地將MySQL替換為Drizzle,因為后者對SQL語法的修改太大了。

Drizzle創(chuàng)建于2008年,致力于更好地服務(wù)MySQL用戶。其創(chuàng)建目標(biāo)是更好地滿足網(wǎng)頁應(yīng)用的核心功能。與MySQL相比,它更加簡單,選擇更少。例如,只能使用utf8作為字符集,并且只有一個類型的BLOB,主要針對64位硬件編譯,且支持IPv6網(wǎng)絡(luò)等。

在代碼層,Drizzle構(gòu)建于一個精簡內(nèi)核和插件的微核心架構(gòu)之上。服務(wù)器的核心比起MySQL已經(jīng)精簡許多。幾乎任何東西都是以插件形式使用。Drizzle使用了諸如Boost的標(biāo)準(zhǔn)開源庫,并遵從代碼、架構(gòu)和API方面的標(biāo)準(zhǔn)。

目前,Drizzle雖然已經(jīng)在某些產(chǎn)品環(huán)境下部署但還沒有廣泛應(yīng)用。Drizzle項目的理念是拋棄向后兼容的束縛,而這意味著相對于遷移一個已有的應(yīng)用而言,它更適合新的應(yīng)用開發(fā)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容