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