- 輕量級(jí)Java EE企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)
- 柳偉衛(wèi)編著
- 3100字
- 2022-07-29 14:31:24
4.1 MySQL概述
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB公司開(kāi)發(fā),后來(lái)被Sun公司收購(gòu),Sun公司后來(lái)又被Oracle公司收購(gòu),目前已經(jīng)歸屬于Oracle旗下。MySQL是流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,在Web應(yīng)用方面,MySQL是很好的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。
MySQL所使用的SQL語(yǔ)言是用于訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的常用標(biāo)準(zhǔn)化語(yǔ)言。MySQL軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型網(wǎng)站的開(kāi)發(fā)以及互聯(lián)網(wǎng)企業(yè)都選擇MySQL作為其數(shù)據(jù)庫(kù)。
4.1.1 MySQL名字的由來(lái)
MySQL的海豚標(biāo)志的名字叫Sakila,它是由MySQL AB的創(chuàng)始人從用戶(hù)在“海豚命名”的競(jìng)賽中建議的大量名字表中選出來(lái)的。獲勝的名字是由來(lái)自非洲斯威士蘭的開(kāi)源軟件開(kāi)發(fā)者Ambrose Twebaze提供的。根據(jù)Ambrose所說(shuō),Sakila來(lái)自一種叫SiSwati的斯威士蘭方言,女性化名稱(chēng)Sakila源自SiSwati。Sakila也是坦桑尼亞Arusha地區(qū)的一個(gè)鎮(zhèn)名,靠近Ambrose的母國(guó)烏干達(dá)。
MySQL的基本目錄以及大量庫(kù)和工具均采用了前綴“My”,其原因是MySQL的共同創(chuàng)辦人Monty Widenius的女兒名字叫“My”。
4.1.2 MySQL的發(fā)展歷程
1979年,有一個(gè)名叫Monty Widenius的人,為一個(gè)叫TcX的小公司打工,并用BASIC設(shè)計(jì)了一個(gè)報(bào)表工具,可以在4MHz主頻和16KB內(nèi)存的計(jì)算機(jī)上運(yùn)行。過(guò)了不久,他將此工具使用C語(yǔ)言重寫(xiě),移植到UNIX平臺(tái),當(dāng)時(shí)這只是一個(gè)很底層的面向報(bào)表的存儲(chǔ)引擎。這個(gè)工具叫作Unireg。
1985年,瑞典的幾位志同道合的小伙子(以David Axmark為首)成立了一家公司,這就是MySQL AB的前身。這個(gè)公司最初并不是為了開(kāi)發(fā)數(shù)據(jù)庫(kù)產(chǎn)品,而是在實(shí)現(xiàn)他們想法的過(guò)程中需要一個(gè)數(shù)據(jù)庫(kù)。他們希望能夠使用開(kāi)源的產(chǎn)品,但在當(dāng)時(shí)并沒(méi)有一個(gè)合適的選擇,只能選擇自己開(kāi)發(fā)。最初,他們只是自己設(shè)計(jì)了一個(gè)利用索引順序存取數(shù)據(jù)的方法,也就是ISAM(Indexed Sequential Access Method)存儲(chǔ)引擎核心算法的前身,利用ISAM結(jié)合mSQL來(lái)實(shí)現(xiàn)他們的應(yīng)用需求。早期,他們主要是為瑞典的一些大型零售商提供數(shù)據(jù)倉(cāng)庫(kù)服務(wù)。在系統(tǒng)使用的過(guò)程中,隨著數(shù)據(jù)量越來(lái)越大,系統(tǒng)復(fù)雜度越來(lái)越高,ISAM和mSQL的組合逐漸不堪重負(fù)。在分析性能瓶頸之后,他們發(fā)現(xiàn)問(wèn)題出在mSQL上面。不得已,他們拋棄了mSQL,重新開(kāi)發(fā)了一套功能類(lèi)似的數(shù)據(jù)存儲(chǔ)引擎,這就是ISAM存儲(chǔ)引擎。大家可能已經(jīng)注意到他們當(dāng)時(shí)的主要客戶(hù)是數(shù)據(jù)倉(cāng)庫(kù),應(yīng)該也容易理解為什么直至現(xiàn)在,MySQL擅長(zhǎng)的是查詢(xún)性能,而不是事務(wù)處理(需要借助第三方存儲(chǔ)引擎)。
1990年,TcX的客戶(hù)中開(kāi)始有人要求為它的API提供SQL支持,當(dāng)時(shí)有人想到了直接使用商用數(shù)據(jù)庫(kù),但是Monty覺(jué)得商用數(shù)據(jù)庫(kù)的速度難以令人滿(mǎn)意。于是,他直接借助mSQL的代碼將它集成到自己的存儲(chǔ)引擎中。但不巧的是,效果并不太好。于是,Monty決心自己重寫(xiě)一個(gè)SQL支持。
1996年,MySQL 1.0發(fā)布,在小范圍內(nèi)使用。到了1996年10月,MySQL 3.11.1發(fā)布了,沒(méi)有2.x版本。開(kāi)始只提供了Solaris下的二進(jìn)制版本。一個(gè)月后,Linux版本出現(xiàn)了。此時(shí)的MySQL還非常簡(jiǎn)陋,除了在一個(gè)表上做一些Insert、Update、Delete和Select操作外,沒(méi)有其他更多的功能。
接下來(lái)的兩年里,MySQL依次移植到各個(gè)平臺(tái)下。它發(fā)布時(shí)采用的許可策略有些與眾不同:允許免費(fèi)商用,但是不能將MySQL與自己的產(chǎn)品綁定在一起發(fā)布。如果想一起發(fā)布,就必須使用特殊許可,意味著需要更多的花費(fèi)。這種特殊許可為MySQL帶來(lái)一些收入,從而為它的持續(xù)發(fā)展打下了良好的基礎(chǔ)。
1999至2000年,有一家公司在瑞典成立了,叫MySQL AB。與Sleepycat合作開(kāi)發(fā)出了Berkeley DB引擎。因?yàn)锽erkeley DB引擎支持事務(wù)處理,所以MySQL從此開(kāi)始支持事務(wù)處理了。
2000年4月,MySQL對(duì)舊的存儲(chǔ)引擎進(jìn)行了整理,命名為MyISAM。
2001年,Heikiki Tuuri向MySQL提出建議,希望能集成他們的存儲(chǔ)引擎InnoDB,這個(gè)引擎同樣支持事務(wù)處理,還支持行級(jí)鎖。所以在2001年發(fā)布3.23版本的時(shí)候,該版本已經(jīng)支持大多數(shù)基本的SQL操作,而且還集成了MyISAM和InnoDB存儲(chǔ)引擎。MySQL與InnoDB的正式結(jié)合版本是4.0。
2004年10月,發(fā)布了經(jīng)典的4.1版本。2005年10月,又發(fā)布了里程碑的一個(gè)版本,MySQL 5.0。在MySQL 5.0中加入了游標(biāo)、存儲(chǔ)過(guò)程、觸發(fā)器、視圖和事務(wù)的支持。在5.0之后的版本里,MySQL明確地表現(xiàn)出邁向高性能數(shù)據(jù)庫(kù)的發(fā)展步伐。
2008年1月16日,MySQL被Sun公司收購(gòu)。
2009年04月20日,Oracle收購(gòu)了Sun公司,MySQL轉(zhuǎn)入Oracle旗下。自此,MySQL數(shù)據(jù)庫(kù)進(jìn)入Oracle時(shí)代,而其第三方的存儲(chǔ)引擎InnoDB早在2005年就被Oracle公司收購(gòu)。
2010年12月,MySQL 5.5發(fā)布,其主要新特性包括半同步的復(fù)制及對(duì)SIGNAL/RESIGNAL的異常處理功能的支持,重要的是InnoDB存儲(chǔ)引擎終于變?yōu)楫?dāng)前MySQL的默認(rèn)存儲(chǔ)引擎。MySQL 5.5不是時(shí)隔兩年后的一次簡(jiǎn)單的版本更新,而是加強(qiáng)了MySQL各個(gè)方面企業(yè)級(jí)的特性。Oracle公司同時(shí)承諾MySQL 5.5和未來(lái)版本仍采用GPL授權(quán)的開(kāi)源產(chǎn)品。
2011年4月,MySQL 5.6發(fā)布,作為被Oracle收購(gòu)后第一個(gè)正式發(fā)布并做了大量變更的版本(5.5版本主要是對(duì)社區(qū)開(kāi)發(fā)的功能的集成),對(duì)復(fù)制模式、優(yōu)化器等做了大量的變更,其中重要的主從GTID復(fù)制模式大大降低了MySQL高可用操作的復(fù)雜性,除此之外,由于對(duì)源代碼進(jìn)行了大量的調(diào)整,到2013年,5.6版本才正式發(fā)布。
2013年4月,5.6版本發(fā)布后,新特性的變更開(kāi)始作為獨(dú)立的5.7分支進(jìn)行進(jìn)一步開(kāi)發(fā),在并行控制、并行復(fù)制等方面進(jìn)行了大量的優(yōu)化調(diào)整,正式發(fā)布于2015年10月,這個(gè)版本也是目前新的穩(wěn)定版本分支。
2016年9月,Oracle決定跳過(guò)MySQL 5.x命名系列,并拋棄之前的MySQL 6、7兩個(gè)分支(從來(lái)沒(méi)有對(duì)外發(fā)布的兩個(gè)分支),直接進(jìn)入MySQL 8版本命名,也就是MySQL 8.0版本的開(kāi)發(fā)。MySQL 8帶來(lái)了全新的體驗(yàn),比如支持NoSQL、JSON等,擁有比MySQL 5.7兩倍以上的性能提升。
4.1.3 MySQL的特點(diǎn)
MySQL的特點(diǎn)如下:
1.MySQL是一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)
數(shù)據(jù)庫(kù)是數(shù)據(jù)的結(jié)構(gòu)化集合。從簡(jiǎn)單的購(gòu)物清單到圖片庫(kù),或者企業(yè)網(wǎng)絡(luò)中的大量信息,它可以是任何東西。要添加、訪(fǎng)問(wèn)和處理存儲(chǔ)在計(jì)算機(jī)數(shù)據(jù)庫(kù)中的數(shù)據(jù),需要一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng),例如MySQL Server。由于計(jì)算機(jī)非常擅長(zhǎng)處理大量數(shù)據(jù),因此數(shù)據(jù)庫(kù)管理系統(tǒng)作為獨(dú)立實(shí)用的程序或其他應(yīng)用程序的一部分,在計(jì)算中起著核心作用。
2.MySQL數(shù)據(jù)庫(kù)是關(guān)系型的
關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)存儲(chǔ)在單獨(dú)的表中,其數(shù)據(jù)結(jié)構(gòu)被組織成針對(duì)速度進(jìn)行了優(yōu)化的物理文件。數(shù)據(jù)庫(kù)所具有的邏輯模型(例如數(shù)據(jù)庫(kù)、表、視圖、行和列)提供了靈活的編程環(huán)境。可以設(shè)置規(guī)則來(lái)管理不同數(shù)據(jù)字段之間的關(guān)系,例如一對(duì)一、一對(duì)多、唯一、必需或可選以及不同表之間的“指針”。當(dāng)數(shù)據(jù)庫(kù)執(zhí)行這些規(guī)則時(shí),可以保證應(yīng)用程序永遠(yuǎn)不會(huì)看到不一致、重復(fù)、孤立、過(guò)時(shí)或丟失的數(shù)據(jù)。
MySQL的SQL部分代表結(jié)構(gòu)化查詢(xún)語(yǔ)言。SQL是用于訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的常見(jiàn)標(biāo)準(zhǔn)化語(yǔ)言。根據(jù)不同的編程環(huán)境,可以直接輸入SQL來(lái)生成報(bào)告,或者將SQL語(yǔ)句嵌入用另一種語(yǔ)言編寫(xiě)的代碼中,或者使用隱藏SQL語(yǔ)法的特定于語(yǔ)言的API。
SQL由ANSI/ISO SQL標(biāo)準(zhǔn)定義。自1986年以來(lái),SQL標(biāo)準(zhǔn)一直在發(fā)展,并且存在多個(gè)版本,比如SQL-92、SQL:1999等,目前新版本是SQL:2003。MySQL支持新的SQL標(biāo)準(zhǔn)版本。
3.MySQL軟件是開(kāi)源的
開(kāi)源意味著任何人都可以使用和修改該軟件。任何人都可以從互聯(lián)網(wǎng)上下載MySQL軟件并使用它而無(wú)須支付任何費(fèi)用。如果愿意,可以學(xué)習(xí)源代碼并進(jìn)行更改以適合你的需求。MySQL軟件使用GPL(GNU通用公共許可證)來(lái)定義在不同情況下可以使用或不可以使用的軟件。如果對(duì)GPL不滿(mǎn)意,或者需要將MySQL代碼嵌入商業(yè)應(yīng)用程序中,那么也可以購(gòu)買(mǎi)商業(yè)許可版本。
4.MySQL非常快速、可靠、可擴(kuò)展且易于使用
MySQL Server可以與其他應(yīng)用程序、Web服務(wù)器等一起輕松地在臺(tái)式機(jī)或筆記本電腦上運(yùn)行。如果將整臺(tái)計(jì)算機(jī)專(zhuān)用于部署MySQL,那么可以更加方便地調(diào)整設(shè)置MySQL,使得MySQL可以更高效的利用計(jì)算機(jī)的內(nèi)存、CPU和I/O容量。MySQL還可以搭建機(jī)器集群。
MySQL Server最初是為處理大型數(shù)據(jù)庫(kù)而開(kāi)發(fā)的,其處理速度比現(xiàn)有的解決方案要快得多,并且已經(jīng)在要求嚴(yán)格的生產(chǎn)環(huán)境中成功使用了數(shù)年。盡管處于不斷發(fā)展中,但MySQL Server如今提供了一組豐富而有用的功能。它的連接性、速度和安全性使MySQL Server非常適合訪(fǎng)問(wèn)Internet上的數(shù)據(jù)庫(kù)。
5.MySQL能在客戶(hù)端/服務(wù)器或嵌入式系統(tǒng)中工作
MySQL數(shù)據(jù)庫(kù)軟件是一個(gè)客戶(hù)端/服務(wù)器系統(tǒng),由支持不同后端的多線(xiàn)程SQL Server、幾個(gè)不同的客戶(hù)端程序和庫(kù)、管理工具以及各種應(yīng)用程序編程接口(API)組成。
MySQL Server還可以作為嵌入式多線(xiàn)程庫(kù),可以將其鏈接到應(yīng)用程序中以獲得更小、更快、更易于管理的獨(dú)立產(chǎn)品。
- Oracle Exadata性能優(yōu)化
- Effective C#:改善C#代碼的50個(gè)有效方法(原書(shū)第3版)
- PHP 從入門(mén)到項(xiàng)目實(shí)踐(超值版)
- Magento 2 Theme Design(Second Edition)
- 青少年學(xué)Python(第1冊(cè))
- Instant Lucene.NET
- 好好學(xué)Java:從零基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn)
- TypeScript 2.x By Example
- Learning Cocos2d-JS Game Development
- Learning D3.js 5 Mapping(Second Edition)
- Qt 5.12實(shí)戰(zhàn)
- Java 9:Building Robust Modular Applications
- Java面向?qū)ο蟪绦蛟O(shè)計(jì)教程
- JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐
- TensorFlow.NET實(shí)戰(zhàn)