什么是MySQL?
MySQL是最流行的開源SQL數(shù)據(jù)庫管理系統(tǒng),由Oracle Corporation開發(fā),分發(fā)和支持。
MySQL網(wǎng)站(https://www.mysql.com/)提供了有關MySQL軟件的最新信息。
- MySQL是一個數(shù)據(jù)庫管理系統(tǒng)。數(shù)據(jù)庫是數(shù)據(jù)的結構化集合。從簡單的購物清單到圖片庫,或者企業(yè)網(wǎng)絡中的大量信息,它都可以是任何東西。要添加,訪問和處理存儲在計算機數(shù)據(jù)庫中的數(shù)據(jù),您需要一個數(shù)據(jù)庫管理系統(tǒng),例如MySQL Server。由于計算機非常擅長處理大量數(shù)據(jù),因此數(shù)據(jù)庫管理系統(tǒng)作為獨立實用程序或其他應用程序的一部分,在計算中起著核心作用。
- MySQL數(shù)據(jù)庫是關系型的。關系數(shù)據(jù)庫將數(shù)據(jù)存儲在單獨的表中,而不是將所有數(shù)據(jù)放在一個大的存儲室中。數(shù)據(jù)庫結構被組織成針對速度進行了優(yōu)化的物理文件。具有對象(例如數(shù)據(jù)庫,表,視圖,行和列)的邏輯模型提供了靈活的編程環(huán)境。您可以設置規(guī)則來控制不同數(shù)據(jù)字段之間的關系,例如一對一,一對多,唯一,必需或可選,以及不同表之間的“指針”。數(shù)據(jù)庫執(zhí)行這些規(guī)則,因此,使用設計良好的數(shù)據(jù)庫,您的應用程序永遠不會看到不一致,重復,孤立,過時或丟失的數(shù)據(jù)?!?MySQL ”的SQL部分代表“結構化查詢語言”。SQL是用于訪問數(shù)據(jù)庫的最常見的標準化語言。根據(jù)您的編程環(huán)境,您可以直接輸入SQL(例如,生成報告),將SQL語句嵌入用另一種語言編寫的代碼中,或使用隱藏SQL語法的特定于語言的API。SQL由ANSI / ISO SQL標準定義。自1986年以來,SQL標準一直在發(fā)展,并且存在多個版本。在本手冊中,“ SQL-92 ”是指1992年發(fā)布的標準,“ SQL:1999 ”是指1999年發(fā)布的標準,“ SQL:2003 ”是指標準的當前版本。我們使用“ SQL標準”一詞來隨時表示SQL標準的當前版本。
- MySQL軟件是開源的。開源意味著任何人都可以使用和修改該軟件。任何人都可以從互聯(lián)網(wǎng)上下載MySQL軟件并使用它而無需支付任何費用。如果愿意,您可以學習源代碼并進行更改以適合您的需求。MySQL軟件使用GPL(GNU通用公共許可證)http://www.fsf.org/licenses/來定義您在不同情況下可以使用或不可以使用的軟件。如果您對GPL不滿意,或者需要將MySQL代碼嵌入到商業(yè)應用程序中,可以從我們這里購買商業(yè)許可版本。有關更多信息,請參見MySQL許可概述(http://www.mysql.com/company/legal/licensing/)。
- MySQL數(shù)據(jù)庫服務器非??焖伲煽?,可擴展且易于使用。如果這是您想要的,則應嘗試一下。MySQL Server可以與其他應用程序,Web服務器等一起輕松地在臺式機或筆記本電腦上運行,幾乎不需要或不需要任何注意。如果將整臺計算機專用于MySQL,則可以調(diào)整設置以利用所有可用的內(nèi)存,CPU能力和I / O容量。MySQL還可以擴展到聯(lián)網(wǎng)的機器集群。MySQL Server最初是為處理大型數(shù)據(jù)庫而開發(fā)的,其處理速度比現(xiàn)有解決方案要快得多,并且已經(jīng)在要求嚴格的生產(chǎn)環(huán)境中成功使用了數(shù)年。盡管處于不斷發(fā)展中,但MySQL Server如今提供了一組豐富而有用的功能。它的連接性,速度和安全性使MySQL Server非常適合訪問Internet上的數(shù)據(jù)庫。
- MySQL Server在客戶端/服務器或嵌入式系統(tǒng)中工作。MySQL數(shù)據(jù)庫軟件是一個客戶端/服務器系統(tǒng),由支持不同后端的多線程SQL Server,幾個不同的客戶端程序和庫,管理工具以及各種應用程序編程接口(API)組成。我們還提供MySQL Server作為嵌入式多線程庫,您可以將其鏈接到應用程序中以獲得更小,更快,更易于管理的獨立產(chǎn)品。
- 可以使用大量的MySQL軟件。MySQL Server具有與用戶密切合作開發(fā)的實用功能集。您最喜歡的應用程序或語言很可能支持MySQL數(shù)據(jù)庫服務器。
發(fā)音“ MySQL ”的官方方法是“ My Ess Que Ell ”(不是“ my sequel ”),但是我們不介意將其發(fā)音為“ my sequel ”還是其他本地化方式。
MySQL的主要功能
本節(jié)描述了MySQL數(shù)據(jù)庫軟件的一些重要特征。在大多數(shù)方面,該路線圖適用于所有版本的MySQL。有關特定于系列的MySQL中引入的功能的信息,請參見相應手冊的“簡而言之”一節(jié):
- MySQL 8.0:第1.4節(jié)“ MySQL 8.0的新增功能”
- MySQL 5.7:MySQL 5.7的新增功能
- MySQL 5.6:MySQL 5.6的新增功能
內(nèi)部和便攜性
- 用C和C + +編寫。
- 經(jīng)過廣泛的不同編譯器測試。
- 可在許多不同平臺上使用。參見 https://www.mysql.com/support/supportedplatforms/database.html。
- 為了便于移植,請在MySQL 5.5及更高版本中使用CMake。先前的系列使用GNU Automake,Autoconf和Libtool。
- 已通過Purify(商用內(nèi)存泄漏檢測器)以及GPL工具Valgrind(http://developer.kde.org/~sewardj/)進行了測試。
- 使用具有獨立模塊的多層服務器設計。
- 設計為使用內(nèi)核線程完全多線程,可以輕松使用多個CPU(如果有)。
- 提供事務性和非事務性存儲引擎。
- 使用MyISAM索引壓縮非??斓腂樹磁盤表()。
- 旨在使其相對容易地添加其他存儲引擎。如果要為內(nèi)部數(shù)據(jù)庫提供SQL接口,這將很有用。
- 使用非常快速的基于線程的內(nèi)存分配系統(tǒng)。
- 使用優(yōu)化的嵌套循環(huán)聯(lián)接執(zhí)行非??焖俚穆?lián)接。
- 實現(xiàn)內(nèi)存中的哈希表,用作臨時表。
- 使用高度優(yōu)化的類庫來實現(xiàn)SQL函數(shù),該類庫應盡可能快。通常,查詢初始化后根本沒有內(nèi)存分配。
- 提供服務器作為在客戶端/服務器網(wǎng)絡環(huán)境中使用的單獨程序,以及作為可嵌入(鏈接)到獨立應用程序中的庫。此類應用程序可以隔離使用,也可以在沒有網(wǎng)絡可用的環(huán)境中使用。
資料類型
- 許多數(shù)據(jù)類型:有符號/無符號整數(shù)1,2,3,4,和8個字節(jié)長,?
FLOAT
?,?DOUBLE
?,?CHAR
?,?VARCHAR
?,?BINARY
?,?VARBINARY
?,?TEXT
?,?BLOB
?,?DATE
?,?TIME
?,?DATETIME
?,?TIMESTAMP
?,?YEAR
?,?SET
?,?ENUM
?,和開放GIS空間類型。請參見第11章,數(shù)據(jù)類型。 - 固定長度和可變長度的字符串類型。
陳述和功能
- 查詢?
SELECT
?列表和?WHERE
?子句中的完全運算符和函數(shù)支持。例如:mysql>SELECTCONCAT(first_name, ' ', last_name)
->FROM citizen
->WHERE income/dependents > 10000 AND age > 30;
- 完全支持SQL ?
GROUP BY
?和?ORDER BY
?子句。支持基函數(shù)(?COUNT()
?,?AVG()
?,?STD()
?,?SUM()
?,?MAX()
?,?MIN()
?,和?GROUP_CONCAT()
?)。 - 支持標準SQL和ODBC語法,LEFT OUTER JOIN并RIGHT OUTER JOIN同時支持它們。
- 支持標準SQL要求的表和列別名。
- 支持?
DELETE
?,?INSERT
?,?REPLACE
?,和?UPDATE
?以返回更改(受影響)的行數(shù),或返回通過連接到服務器時設置標志,而不是匹配的行的數(shù)量。 - 支持特定于MySQL的?
SHOW
?語句,該語句檢索有關數(shù)據(jù)庫,存儲引擎,表和索引的信息。支持?INFORMATION_SCHEMA
?數(shù)據(jù)庫,根據(jù)標準SQL實現(xiàn)。 - 一條?
EXPLAIN
?語句,顯示優(yōu)化器如何解析查詢。 - 函數(shù)名稱與表或列名稱的獨立性。例如,?
ABS
?是一個有效的列名。唯一的限制是對于函數(shù)調(diào)用,函數(shù)名稱和其后的“?(
?”之間不允許有空格。請參見第9.3節(jié)“關鍵字和保留字”。 - 您可以在同一條語句中引用來自不同數(shù)據(jù)庫的表。
安全
- 特權和密碼系統(tǒng),非常靈活和安全,并且可以進行基于主機的驗證。
- 連接服務器時,通過對所有密碼通信進行加密來實現(xiàn)密碼安全。
可擴展性和限制
- 支持大型數(shù)據(jù)庫。我們將MySQL Server與包含5000萬條記錄的數(shù)據(jù)庫一起使用。我們也知道使用MySQL Server的用戶有200,000個表和大約5,000,000,000行。
- 每個表最多支持64個索引。每個索引可以包含1到16列或部分列。InnoDB表的最大索引寬度為767字節(jié)或3072字節(jié)。請參見第15.22節(jié)“ InnoDB限制”。?
MyISAM
?表的最大索引寬度為 1000字節(jié)。請參見第16.2節(jié)“ MyISAM存儲引擎”。索引可使用的柱的前綴?CHAR
?,?VARCHAR
?,?BLOB
?,或?TEXT
?列類型。
連接性
- 客戶端可以使用多種協(xié)議連接到MySQL Server:
- 客戶端可以在任何平臺上使用TCP / IP套接字進行連接。
- 在Windows系統(tǒng)上,如果服務器在?
named_pipe
?啟用系統(tǒng)變量的情況下啟動,則客戶端可以使用命名管道進行連接。如果在?shared_memory
?啟用系統(tǒng)變量的情況下啟動,Windows服務器還支持共享內(nèi)存連接。客戶端可以使用該?--protocol=memory
?選項通過共享內(nèi)存進行連接。 - 在Unix系統(tǒng)上,客戶端可以使用Unix域套接字文件進行連接。
- MySQL客戶端程序可以用多種語言編寫。用C編寫的客戶端庫可用于用C或C + +編寫的客戶端,或提供C綁定的任何語言的客戶端。
- 提供了C,C + +,Eiffel,Java,Perl,PHP,Python,Ruby和Tcl的API,使MySQL客戶端可以用多種語言編寫。請參見第28章,連接器和API。
- 連接器/ ODBC(MyODBC)接口為使用ODBC(開放數(shù)據(jù)庫連接)連接的客戶端程序提供MySQL支持。例如,您可以使用MS Access連接到MySQL服務器??蛻舳丝梢栽赪indows或Unix上運行。連接器/ ODBC源可用。支持所有ODBC 2.5功能,以及許多其他功能。參見《 MySQL Connector / ODBC開發(fā)人員指南》。
- Connector / J接口為使用JDBC連接的Java客戶端程序提供MySQL支持。客戶端可以在Windows或Unix上運行。連接器/ J源可用。參見《 MySQL Connector / J 5.1開發(fā)人員指南》。
- MySQL Connector / NET使開發(fā)人員可以輕松創(chuàng)建需要與MySQL安全,高性能數(shù)據(jù)連接的.NET應用程序。它實現(xiàn)了必需的ADO.NET接口,并集成到ADO.NET感知工具中。開發(fā)人員可以使用他們選擇的.NET語言來構建應用程序。MySQL Connector / NET是使用100%純C#編寫的完全托管的ADO.NET驅(qū)動程序。參見《 MySQL Connector / NET開發(fā)人員指南》。
本土化
- 服務器可以用多種語言向客戶端提供錯誤消息。請參見第10.12節(jié)“設置錯誤消息語言”。
- 幾個不同的字符集,包括全面支持?
latin1
?(CP1252),?german
?,?big5
?,?ujis
?一些Unicode字符集等。例如,在表名和列名中允許使用斯堪的納維亞字符“??
?”,“??
?”和“??
?”。 - 所有數(shù)據(jù)都保存在所選字符集中。
- 排序和比較是根據(jù)默認字符集和排序規(guī)則完成的。可以在啟動MySQL服務器時更改此設置(請參見第10.3.2節(jié)“服務器字符集和排序規(guī)則”)。要參見非常高級的排序示例,請參見Czech排序代碼。MySQL Server支持許多不同的字符集,可以在編譯時和運行時指定它們。
- 服務器時區(qū)可以動態(tài)更改,并且各個客戶端可以指定自己的時區(qū)。請參見第5.1.13節(jié)“ MySQL服務器時區(qū)支持”。
客戶和工具
- MySQL包含幾個客戶端程序和實用程序。這些都包括命令行程序(例如mysqldump和mysqladmin)以及圖形程序(例如 MySQL Workbench)。
- MySQL Server內(nèi)置了對SQL語句的支持,以檢查,優(yōu)化和修復表。這些語句可通過mysqlcheck客戶端從命令行使用。MySQL還包括myisamchk,這是一個非??斓拿钚袑嵱贸绦?,用于對?
MyISAM
?表執(zhí)行這些操作。請參閱第4章,MySQL程序。 - 可以使用?
--help
?或?-?
?選項調(diào)用MySQL程序以獲得在線幫助。
MySQL的歷史
我們最初的目的是使用?mSQL
?數(shù)據(jù)庫系統(tǒng)通過我們自己的快速低級(ISAM)例程連接到我們的表。但是,經(jīng)過一些測試,我們得出的結論?mSQL
?是不夠快或不夠靈活,無法滿足我們的需求。這樣就為我們的數(shù)據(jù)庫提供了一個新的SQL接口,但具有與幾乎相同的API接口?mSQL
?。該API旨在使編寫供使用的第三方代碼能夠?mSQL
?輕松移植以與MySQL一起使用。
MySQL以共同創(chuàng)始人Monty Widenius的女兒My命名。
MySQL Dolphin(我們的徽標)的名稱為“ Sakila ”,它是從用戶在“ Name of Dolphin ”競賽中建議的大量名稱中選擇的。獲勝者的名字是來自非洲斯威士蘭的開源軟件開發(fā)商Ambrose Twebaze提交的。根據(jù)安布羅斯(Ambrose)的說法,女性名稱Sakila起源于斯威士蘭的本地語言SiSwati。Sakila還是坦桑尼亞阿魯沙的一個小鎮(zhèn)的名字,靠近安布羅斯的原籍國烏干達。
更多建議: