MySQL是一款由瑞典MySQL AB公司開發,Oracle數據庫旗下的開源的關系型數據庫管理系統,廣泛地應用于Internet上的中小型網站開發,是最流行的數據庫管理系統之一。
1979年,MySQL最初是由一個名叫蒙蒂·維德紐斯(Monty Widenius)設計的一款底層面向報表的存儲引擎工具——Unireg。1996年,MySQL1.0版本發布,1999-2000年,MySQL AB公司在瑞典成立。2005年10月,里程碑版本5.0發布,它使MySQL具備了企業級數據庫管理系統的特性。2008年1月16號,MySQL被太陽微系統收購,進入Sun MySQL時代。2009年4月20日,甲骨文公司(Oracle數據庫)收購太陽微系統,進入Oracle MySQL時代。2010年12月,MySQL5.5版本發布,該版本加強了MySQL各個方面企業級的特性。2015年,MySQL 5.7 GA重磅發布,新特性包括160萬只讀QPS等。2016年9月,MySQL第一個開發里程碑8.0.0版本發布。2023年10月,MySQL發布了8.2.0版本,這是最受歡迎的開源數據庫的第二個創新版本。同年7月,MySQL版本更迭為9.0.0,主要增加了ECMAScript 存儲程序、VECTOR 類型支持、內聯和隱式外鍵約束等功能。2025年1月21日,MySQL 9.2.0版本發布。
MySQL采用的是SQL(SQL),這是一種被廣泛應用于訪問數據庫的常用標準化語言。MySQL由于其體積小、速度快、總體成本低、開放源代碼、提供多種存儲器引擎、支持大型數據等特點已成為多數中小型網站選擇的網站數據庫。2009年,美國的科技網站《Inforworld》評出了10大最具價值開源軟件,MySQL在其中排名第6。2019年,MySQL在全球知名的數據庫流行度排行榜網站DB-Engines的351 個受監測數據庫管理系統中排名第一,獲得DB-Engines2019“年度 DBMS”稱號。
名稱由來
MySQL基本目錄及大量庫和工具均采用了前綴“my”,這是瑞典程序員Michael Widenius的女兒的名字,他是MySQL的共同創始人,在開發中起到了關鍵作用。
MySQL的徽標是一只海豚,名字叫“Sakila”,是由MySQL AB的創始人從用戶在“海豚命名”的競賽提供的大量名字列表中篩選出來的,該名字由來自非洲埃斯瓦蒂尼(Eswatini,前斯威士蘭)的開源軟件開發者Ambrose Twebaze提供,它來源于名叫SiSwati的斯威士蘭方言,也是Ambrose家鄉烏干達附近桑塔尼亞Arusha地區一個小鎮的名字。
發展歷程
1979年,MySQL最初是由一個名叫蒙蒂·維德紐斯(Monty Widenius)的小職員為一個叫TcX的公司設計的一款底層面向報表的存儲引擎工具——Unireg。在1985年,Monty Widenius和幾個志同道合的朋友在瑞典成立了一家公司,也就是MySQL AB的前身。他們自己設計了一個索引順序存取數據算法,開發了高查詢性能的數據引擎,也就是ISAM(Indexed Sequential Access Method)存儲引擎核心算法的前身。利用ISAM結合mSQL(一種數據庫系統)實現他們的應用需求。
1996年,MySQL1.0版本發布,此時該版本只在小范圍使用。10月,跳過2.x版本,3.11.1發布,一個月后Linux版本出現。此時MySQL只能在一個表上做一些Insert(插入)、Update(更新)、Delete(刪除)和Select(選擇)操作。
1999至2000年,MySQL AB公司在瑞典成立,與Sleepycat合作開發了Berkeley DB引擎,從此開始支持事務處理。2000年4月,MySQL對舊儲存引擎進行整理,命名為My-lSAM。2001年,在Heikki Tuuri的建議下,集成了myisam和InnoDB儲存引擎正式結合InnoDB引擎的4.0版本發布。此時MySQL已經支持大多數的SQL操作。2004年10月,經典的4.1版本發布,引入了更多新的語法,新增加了子查詢。2005年10月,里程碑版本5.0發布,加入了游標、儲存過程、觸發器、視圖和事務支持。
2008年1月16號,MySQL被Sun公司收購,進入Sun MySQL時代。2009年4月20日,甲骨文公司(Oracle數據庫)收購太陽微系統,進入Oracle MySQL時代。2010年12月,MySQL5.5版本發布,InnoDB成為默認儲存引擎。MySQL 5.5加強了MySQL各個方面企業級的特性。2011年4月,MySQL 5.6版本發布,由于對源代碼的調整,2013年才正式發布。2013年4月,MySQL 5.7版本發布,并在并行控制、并行復制等方面進行了大量的優化調整。2015年,MySQL 5.7 GA重磅發布,新特性包括160萬只讀QPS等。
2016年9月,MySQL第一個開發里程碑8.0.0版本發布。MySQL8 帶來了全新的體驗,比如支持NoSQL、JSON等,擁有比MySQL 5.7兩倍以上的性能提升。2017-2023年,MySQL不斷更新,發布了8.0系列版本。2023年10月,MySQL發布了8.2.0版本,這是最受歡迎的開源數據庫的第二個創新版本。對于InnoDB數據庫、克隆、服務器編譯等進行了優化。2024年1月,MySQL發布了8.3.0版。同年7月,MySQL版本更迭為9.0.0,主要增加了ECMAScript 存儲程序、VECTOR 類型支持、內聯和隱式外鍵約束等功能。2025年1月21日,MySQL 9.2.0版本發布。
歷史版本
備注:僅收錄部分關鍵或者主要版本
環境和配置
MySQL數據庫服務器的最低要求包括操作系統、處理器、內存、存儲空間、網絡要求和安全性要求。
功能和服務
產品功能
數據索引:MySQL的數據索引功能可以幫助用戶快速定位和檢索數據庫中的數據。通過在表中創建索引,可以提高數據庫查詢的速度和效率。MySQL支持多種類型的索引,包括主鍵索引、唯一索引、普通索引和全文索引等。主鍵索引是唯一標識一條記錄的索引,唯一索引保證索引值的唯一性。索引的常見操作主要包括創建索引和刪除索引等。
操作數據庫:MySQL數據庫操作可以分為創建、選擇、查看和刪除4類。用戶可以使用CREATE語句及insert into等其它子語句創建數據庫、用use命令于選擇一個數據庫,可以使用show databases命令查看MySQL數據庫中所有已經存在的數據庫和使用drop database命令刪除數據庫。
操作數據表:數據庫創建完成后,即可在命令提示符下對數據庫進行操作,如創建數據表、更改數據表結構以及刪除數據表等。用戶可以使用create table命令創建數據表,使用show columns命令或describe命令查看指定數據表的表結構。采用alter table命令修改表結構。
數據查詢:查詢數據是指從數據庫中獲取需要的數據,用戶可以根據自己對數據的需求來查詢不同的數據。在MySQL中,對數據庫的查詢使用SELECT語句,其功能非常強大,使用較為靈活。
存儲過程:存儲過程是一種在數據庫中存儲復雜程序,以便外部程序調用的數據庫對象。存儲過程包含完成特定功能的SQL集,經編譯創建并保存在數據庫中。用戶可指定存儲過程的名字并給定相應參數來調用執行。用戶可以創建存儲過程以及使用存儲過程。
函數:MySQL函數是MySQL數據庫提供的內置函數。MySQL函數包括數學函數、字符串函數、日期和時間函數、條件判斷函數、系統信息函數、加密函數、格式化函數等。函數的執行速度非常快,可以提高MySQL的處理速度,簡化用戶的操作。
視圖:數據庫中的視圖,它是從一個或幾個基本表(或視圖)通過某種定義規則組織起來的虛擬表。使用視圖,可以定制用戶數據,聚焦特定的數據。用戶可以創建視圖以及修改和刪除視圖。
MySQL備份與恢復:數據備份是保證數據安全的最后一道屏障。備份使數據庫的失效次數減到最少,從而使數據庫保持最大的可用性。用戶可以使用mysqldump與BingLog兩種方式對MySQL數據庫進行備份與恢復操作技術。
服務場景
MySQL目前大多應用于互聯網行業,如:百度、騰訊控股、淘寶、京東集團、網易、新浪、 谷歌、Facebook、Twitter、GitHub 等都在使用 MySQL。搜索、社交、電子商務、游戲的核心存儲往往也是 MySQL。其常見的應用場景:
Web 網站系統:由于MySQL數據庫的安裝配置簡單,運營成本低,性能好, MySQL 是開放源代碼的,完全可以免費使用,因此Web 網站開發者成為了 MySQL 的主要客戶群。
日志記錄系統:MySQL 數據庫的插入和查詢性能高效。比如處理用戶的登錄日志,操作日志等,都是常用的應用場景。
數據倉庫系統:通過 MySQL 的簡單復制功能,可以將數據從一臺主機復制到另外一臺 ,在局域網、廣域網內都可以復制,從而提升計算機的性能和數據存儲量。MySQL免費并且使用成本低。
嵌入式系統:MySQL在資源使用方面的伸縮性非常大,無論在資源充裕還是資源稀缺的環境都可正常運行。而且MySQL有專門針對于嵌入式環境的版本。
產品特色
開放源代碼:使用 C和 C++編寫,并使用了多種編譯器進行測試,保證了源代碼的可移植性,同時為多種編程語言提供了 API。這些編程語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 TCL科技 等,并且完全開放。同時,開源也帶來免費,各個技術愛好者可以一起審核程序、優化問題,并且無需付費。
完全基于多線程核心:支持多處理器,因此MySQL是一個真正的多用戶、多線程SQL數據庫服務器,支持大容量的用戶和并發業務操作,是中小企業特別是Linux平臺的首選自由數據庫。
插件式存儲引擎:MySQL使用的是插件式存儲引擎。它將mylsam、InnoDB、ndb、tokudb等引擎兼容并包,其中最廣泛使用的是myisam和InnoDB兩種存儲引擎。MyISAM是MySQL最早的ISAM存儲引擎的升級版本,也是MySQL默認的存儲引擎。
多平臺支持:MySQL可以支持C++、Java、Perl、Python、PHP等等,可以在unix、Windows、Linux等各種平臺使用。
數據類型豐富:除了常用類型外,MySQL還支持變長的BLOB類型,以及在其他數據庫系統比較少見的枚舉類型ENUM和SET。
應用程序接口簡單:MySQL基于客戶/服務器結構,其客戶庫中提供了一個完整而又一致的語言包裝器,可以方便地使用PHP、Java、Perl等語言連接到MySQL。
產品架構
邏輯架構
MySQL邏輯架構整體分為三層:客戶端層、服務器層和存儲引擎層。
最上層為客戶端層,主要負責應用連接處理、用戶鑒權和安全管理等,這些主要功能均在這一層處理。比如連接處理、授權認證、安全等等。最上層的服務并不是MySQL所獨有的,大多數基于網絡的客戶端/服務器的工具或者服務都有類似的架構。
第二層為服務器層。大多數MySQL的核心服務功能都在這一層,包括查詢解析、分析、優化、緩存以及所有的內置函數(例如,日期、時間、數學和加密函數),所有存儲引擎的功能都在這一層實現:存儲過程、觸發器、視圖等。
第三層為存儲引擎。存儲引擎負責MySQL中數據的存儲和提取和linux下的各種文件系統,服務器通過API與存儲引擎進行通信。
環境變量
MySQL中主要直接及間接使用的環境變量如下:
存儲引擎
一般來說,MySQL有以下4種引擎:myisam、HEAP、InnoDB和Berkley(BDB)。MySQL不同的版本所支持的引擎是有差異的。
MyISAM:MyISAM是MySQL的ISAM擴展格式和默認的數據庫引擎。除了提供ISAM里所沒有的索引和字段管理的大量功能,MyISAM還使用一種表格鎖定的機制,來優化多個并發的讀寫操作。MyISAM還有一些有用的擴展,例如用來修復數據庫文件的MyISAMChk工具和用來恢復浪費空MyISAMPack工具。myisam提供了大量的特性,包括全文索引、壓縮、空間函數(GIS)等。
MERGE:MERGE存儲引擎是一組MyISAM表的組合,這些MyISAM表結構必須完全相同,盡管其使用不如其他引擎突出,但是在某些情況下非常有用。MERGE表就是幾個相同MyISAM表的聚合器。
HEAP:HEAP允許只駐留在內存里的臨時表格。HEAP表格在需要使用SELECT表達式來選擇和操控數據的時候非常高效。
InnoDB和Berkley DB(BDB):InnoDB是MySQL的默認事務型引擎,它被設計用來處理大量的短期(short-lived)事務。InnoDB還引入了行級鎖定和外鍵約束,在以下場合使用InnoDB是理想的選擇。
Archive引擎:Archive存儲引擎只支持INSERT和SELECT操作,在MySQL 5.1之前不支持索引。Archive表適合日志和數據采集類應用。Archive引擎支持行級鎖和專用的緩存區,所以可以實現高并發的插入,但它不是一個事物型的引擎,而是一個針對高速插入和壓縮做了優化的簡單引擎。
數據類型
在MySQL數據庫中,每一條數據都有其數據類型。MySQL支持的數據類型主要分成3類:數字類型、字符串(字符)類型、日期和時間類型。
數字類型:
MySQL支持所有的ANSI/ISO SQL 92數字類型,包括準確數字的數據類型(NUMERIC、DECIMAL、INTEGER和SMALLINT)、近似數字的數據類型(FLOAT、REAL和DOUBLE )。
字符串(字符)類型:
字符串類型可以分為3類:普通的文本字符串類型(CHAR和VARCHAR)、可變類型(TEXT和BLOB)和特殊類型(SET和ENUM)。它們之間都有一定的區別,取值的范圍不同,應用的地方也不同。
日期和時間類型:
日期和時間類型包括DATETIME、DATE、TIMESTAMP、TIME和YEAR。每種類型都有其取值的范圍,如賦予它一個不合法的值,將會被“0”代替。
支持的SQL語言
從結構化查詢語言語句類型上講,mSQL支持的SQL語言主要是四種類型:數據操縱語言(DML)、數據定義語言(DDL)、數據查詢語言(DQL)和數據控制語言(DCL)。不同語句被數據庫引擎執行,其執行方式、復雜程度都不相同。其中最為復雜的是DQL查詢語句。查詢語句的執行。
1.數據定義語言(數據 Definition Language,DDL):用戶可以對數據庫的結構描述定義,包括數據庫的完整性、安全保密定義,如口令、級別、存取權限等。這些定義存儲在數據字典中,是數據庫管理系統的基本依據。數據定義語言涉及Transact-SQL語言中的SQL CREATE TABLE、CREATEVIEW、CREATE INDEX等語句。
2.數據操縱語言(Data Manipulation Language, DML)主要用于操縱數據庫中的數據,包括INSERT、SELECT、UPDATE、DELETE等語句。INSERT用于插入數據;UPDATE用于修改數據;DELETE用于刪除數據;SELECT則可以根據用戶需要從數據庫中查詢一條或多條數據。
3.數據查詢語言(數據 Query Language,DQL):一般指數據檢索語句。基本結構是由SELECT子句、FROM子句、WHERE子句組成的查詢塊,即“SELECT <字段名表> FROM <表或視圖名> WHERE <查詢條件>”的格式, SQL Server 2008數據庫對標準的數據查詢語言進行了功能上的擴展。
4.數據控制語言(Data Control Language,DCL):用于安全管理,確定哪些用戶可以查看或修改數據庫中的數據。數據控制語言用來授予或回收訪問數據庫的某種特權,并控制數據庫操縱事務發生的時間及效果,對數據庫實行監視等。
管理工具
所獲榮譽
參考資料
相關事件
甲骨文收購MySQL
2009年外媒評價“甲骨文收購MySQL”為IT市場9大失敗事件之一,同時MySQL聯合創始人大衛·艾克馬克(David Axmark)也在2010年的采訪中表示:“甲骨文沒有真正的理由支持MySQL,盡管當前MySQL與甲骨文數據庫之間的競爭不是很激烈,但隨著MySQL的日益壯大,對甲骨文數據庫的發展是不利的。”
切換數據庫
2016年,優步(Uber)在博客中宣布已經把數據庫從Postgres切換到了MySQL,該公司負責的工程師表示,Uber早期架構是由Python語言編寫的后端應用構成,使用了Postgres數據庫。但由于隨后優步應用的架構發生明顯改變,轉型為微服務模型和新數據平臺,因此需要改用基于MySQL的數據庫分片層。切換到Schemaless和其它基于MySQL的后端服務最主要的原因是Postgres數據復制效率低下,需要重寫每一個行索引,而MySQL只更新改變的索引。
參考資料 >
MySQL.MySQL官網.2025-01-23
MySQL 8.3 發行說明.MySQL官網.2024-02-02
MySQL 9.0 Release Notes.MySQL官網.2025-01-23
1.4?What Is New in MySQL 9.0.MYSQL官網.2025-01-23
MySQL 9.2 Release Notes.MySQL官網.2025-01-23
10大最具價值開源軟件 Ubuntu和MySQL上榜——中新網.中國新聞網.2023-12-12
DB-Engines 2019:MySQL 獲得“年度數據庫”稱號.新浪科技.2023-12-12
History of MySQL.MySQL.2025-01-23
MySQL 9.1 Release Notes.MySQL 官網.2025-01-23
MySQL 8.4 Release Notes.MySQL官網.2025-01-23
MySQL 8.2 Release Notes.MySQL官網.2025-01-24
MySQL 8.1 發行說明.MySQL官網.2024-02-02
MySQL 8.0 發行說明.MySQL官網.2024-01-12
MySQL Product Archives.MySQL官網.2024-01-12
MySQL Connector/J 6.0.2 m1 Development Release has been released.MySQL官網.2025-01-24
MySQL 5.7.1 中的更改(2013-04-23,里程碑 11).MySQL官網.2024-01-12
MySQL 5.6 Release Notes.MySQL官網.2024-01-12
MySQL Connector/J 5.1.49 GA has been released.MySQL官網.2025-01-24
MySQL Connector/J 6.0.2 m1 Development Release has been released.MySQL官網.2025-01-24
MySQL Connector/J 6.0.2 m1 Development Release has been released.MySQL官網.2025-01-24
Changes in MySQL Enterprise Backup 4.1.0 (2017-03-03).MySQL 官網.2025-01-24
3.11.1 Recommendation Model Types.MYSQL 官網.2025-01-24
Mysql數據庫服務器最低要求.騰訊云.2025-01-24
Supported Platforms: MySQL Database.MySQL官網.2025-01-24
4 .5.4 mysqldump - 數據庫備份程序.MySQL官網.2024-01-23
將 MySQL 引入 Web.phpmyadmin官網.2024-01-23
MySQL產品存檔.MySQL官網.2024-01-23
Navicat中國.Navicat中國.2023-12-07
MySQL Connector/ODBC 開發人員指南.MySQL官網.2024-01-23
適用于 MySQL 的 DbNinja.dbninja官網.2024-01-23
DBeaver社區 .DBeaver官網.2024-01-23
這是什么.sqlitemanager.2024-01-23
sequelpro介紹.sequelpro.2024-01-23
2009年IT市場9大失敗事件 甲骨文收購MySQL.中國新聞網.2023-12-12
MySQL創始人:甲骨文沒有真正理由支持MySQL ——中新網.中國新聞網.2023-12-12
13 年,MySQL 之父賭贏了:另起爐灶的 MariaDB 成功上市!.騰訊網.2024-01-10
為什么 Uber Engineering 從 Postgres 切換到 MySQL.優步博客.2024-01-10
優步切換數據庫:從Postgres到MySQL,架構改變.IT之家.2023-12-12