MySQL數據庫掃盲篇 html
做者:尹正傑 mysql
版權聲明:原創做品,謝絕轉載!不然將追究法律責任。算法
一.MySQL概述sql
1>.什麼是MySQL 數據庫
MySQL是瑞典的MySQL AB公司開發的一個可用於各類流行操做系統平臺的關係數據庫系統,它具備客戶機/服務器體系結構的分佈式數據庫管理系統。
MySQL是一種開放源代碼的關係型數據庫管理系統(RDBMS), MySQL數據庫系統使用最經常使用的數據庫管理語言,即結構化查詢語言(SQL)進行數據庫管理。
MySQL 徹底適用於網絡,用其建造的數據庫可在因特網上的任何地方訪問,所以,能夠和網絡上任何地方的任何人共享數據庫。MySQL具備功能強、使用簡單、管理方 便、運行速度快、可靠性高、安全保密性強等優勢。
MySQL用C和C++編寫,它能夠工做在許多平臺(Unix,Linux,Windows)上,提供了 針對不一樣編程語言(C,C++,JAVA等)的API函數;使用核心線程實現多線程,可以很好的支持多CPU;提供事務和非事務的存儲機制;快速的基於線 程的內存分配系統;
MySQL採用雙重許可,用戶能夠在GNU許可條款下以避免費軟件或開放源碼軟件的方式使用MySQL軟件,也能夠從MySQL AB公司得到正式的商業許可。
MySQL體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色, 使得許多企業選擇了MySQL做爲數據庫
2>.MySQL歷史編程
MySQL的歷史最先能夠追溯到1979年,那時Oracle也纔剛剛開始, 微軟的SQL Server影子都沒有:
1979年:
TcX公司 Monty Widenius,Unireg開始研發MySQL, 1996年:
發佈MySQL1.0,Solaris版本,Linux版本。 1999年:
MySQL AB公司,瑞典。 2003年:
MySQL 5.0版本,提供視圖、存儲過程等功能。 2008年:
在2008年1月16號 MySQL被Sun公司收購。 2009年:
2009年,SUN又被Oracle收購。 2009年:
Monty成立MariaDB。
3>.MariaDB數據庫介紹後端
MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL受權許可 MariaDB的目的是徹底兼容MySQL,包括API和命令行,使之能輕鬆成爲MySQL的代替品。在存儲引擎方面,使用XtraDB(英語:XtraDB)來代替MySQL的InnoDB。 MariaDB由MySQL的創始人Michael Widenius(英語:Michael Widenius)主導開發,他早前曾以10億美圓的價格,將本身建立的公司MySQL AB賣給了SUN,此後,隨着SUN被甲骨文收購,MySQL的全部權也落入Oracle的手中。MariaDB名稱來自Michael Widenius的女兒Maria的名字。
MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發者但願提供訪問即將到來的MySQL 5.4 InnoDB性能。這個版本還包括了 PrimeBase XT (PBXT) 和 FederatedX存儲引擎。
4>.爲何選用 MySQL瀏覽器
若是您正在尋找一種免費的或不昂貴的數據庫管理系統,能夠有幾個選擇,如,MySQL、mSQL、Postgres(一種免費的但不支持來自商業供應商引擎的系統)等。
在將MySQL與其餘數據庫系統進行比較時,所要考慮的最重要的因素是性能、支持、特性(與SQL的一致性、擴展等等)、認證條件和約束條件、價格等。相比之下,MySQL 具備許多吸引人之處: 1.速度:
MySQL 運行速度很快。開發者聲稱 MySQL 多是目前能獲得的最快的數據庫。可訪問 http://www.mysql.com/benchmark.html (MySQL Web 站點上的性能比較頁),調查一下這個性能。 2.容易使用:
MySQL 是一個高性能且相對簡單的數據庫系統,與一些更大系統的設置和管理相比,其複雜程度較低。 3.價格:
MySQL 對多數我的用戶來講是免費的。 4.小巧:
4.1.1的數據庫發行版僅僅只有21M,安裝完成也僅僅51M。 5.支持查詢語言:
MySQL 能夠利用 SQL(結構化查詢語言),SQL 是一種全部現代數據庫系統都選用的語言。也能夠利用支持 ODBC(開放式數據庫鏈接)的應用程序,ODBC 是 Microsoft 開發的一種數據庫通訊協議。 6.性能:
許多客戶機可同時鏈接到服務器。MySQL數據庫沒有用戶數的限制,多個客戶機可同時使用同一個數據庫。可利用幾個輸入查詢並查看結果的界面來交互 式地訪問 MySQL。這些界面爲:命令行客戶機程序、Web 瀏覽器或 X Window System 客戶機程序。此外,還有由各類語言(如C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and Tcl)編寫的界面。所以,能夠選擇使用已編好的客戶機程序或編寫本身的客戶機應用程序。 7.鏈接性和安全性:
MySQL 是徹底網絡化的,其數據庫可在因特網上的任何地方訪問,所以,能夠和任何地方的任何人共享數據庫。並且 MySQL 還能進行訪問控制,能夠控制哪些人不能看到您的數據。 8.可移植性:
MySQL 可運行在各類版本的 UNIX 以及其餘非 UNIX 的系統(如 Windows 和 OS/2)上。MySQL 可運行在從家用 PC 到高級的服務器上。 9.開放式的分發:
MySQL容易得到;只要使用Web瀏覽器便可。若是不能理解某樣東西是如何起做用的,或者對某個算法感到好奇,能夠將其源代碼取來,對源代碼進行分析。若是不喜歡某些東西,則能夠更改它。
5>.MySQL社區版與MySQL企業版區別安全
若是僅僅是從學習角度,直接使用社區版就能夠了,二者沒有本質區別。只有在須要官方的商業服務的時候纔會看出很大區別。
主要的區別有如下兩點。 1.企業版只包含穩定以後的功能,社區版包含全部Mysql的最新功能。 也就是說,社區版是企業版的測試版,可是,前者的功能要比後者多。 2.官方的支持服務只針對企業版,用戶在使用社區版時出現任何問題,Mysql官方概不負責。
至於管理工具,Mysql官方提供的工具都是免費的,從官方網站均可如下載到,一樣能夠用在社區版的Mysql上。
二.MySQL系列性能優化
官方網址: https://www.mysql.com/(MySQL官網) http://mariadb.org/(mariadb官網) https://www.percona.com(percona官網) https://dev.mysql.com/downloads/mysql/(MySQL社區版下載頁面) 官方文檔 https://dev.mysql.com/doc/(MySql官網文檔) https://mariadb.com/kb/en/(mariadb官方文檔) https://www.percona.com/software/mysql-database/percona-server(percona官方文檔) 版本演變: MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0 MariaDB:5.5 -->10.0--> 10.1 --> 10.2 --> 10.3
三.MySQL相關產品介紹
1>.Oracle MySQL Cloud Service (commercial)
商業付費軟件,基於MySQL企業版和Oracle雲服務提供企業級 的MySQL數據庫服務。
2>.MySQL Enterprise Edition(commercial)
商業付費軟件,除了提供MySQL數據庫服務以外,又包含了connector(程序連 接接口),partition(表分區),企業級的monitor(監控),HA(高可用),backup(備份), Scalability(擴展)等服務。
3>.MySQL Cluster CGE(commercial)
商業付費軟件,基於MySQL Cluster和企業版擁有的各項功能提供企業級的高併發 、高吞吐的數據庫服務。
4>.MySQL Community Edition
免費社區軟件,提供基礎的數據庫服務和其餘衍生服務。
四.MySQL社區軟件相關產品介紹
1>.MySQL Community Server
最流行的開源數據庫管理軟件,當前最新版本是8.0。
2>.MySQL Cluster
基於MySQL數據庫而實現的集羣服務,自身能提供高併發,高負載等特性。
3>.MyzSQL Fabric MySQL
官方提供的關於MySQL數據庫高可用和數據分片的解決方案。
4>.MySQL Connectors
爲應用程序提供JDBC/ODBC等訪問MySQL數據庫的接口服務。
五.MySQL Community Server各版本主要區別
1>.MySQL4.0版本
增長了子查詢的支持,字符集增長UTF-8,GROUP BY 語句增長了ROLLUP,mysql.user表採用了更好的加密算法,InnoDB開始 支持單獨的表空間。
2>.MySQL5.0版本
增長了Stored procedures、Views、Cursors、Triggers、 XA transactions的支持,增長了INFORATION_SCHEMA系統數據庫。
3>.MySQL5.5版本
默認存儲引擎更改成InnoDB,提升性能和可擴展性, 增長半同步複製。
4>.MySQL5.6版本
提升InnoDB性能,支持延遲複製。
5>.MySQL5.7版本
提高數據庫性能和存儲引擎,更健壯的複製功能,增 加sys系統庫存放數據庫管理信息。
6>.MySQL8.0版本
在5.7版本基礎之上,又作了更好的性能優化。好比默認的用戶加密認證算法的變動。
六.MYSQL的特性
1.插件式存儲引擎:也稱爲「表類型」,存儲管理器有多種實現版本,功能和特性可能均略有差異;用戶可根據須要靈活選擇,Mysql5.5.5開始innoDB引擎是MYSQL默認引擎 MyISAM ==> Aria InnoDB ==> XtraDB
2.單進程,多線程
3.諸多擴展和新特性
4.提供了較多測試組件
5.開源
mysql> SHOW ENGINES; #查看MySQL8.0.x版本支持的"插件式存儲引擎";不難發現"InnoDB"爲默認的存儲引擎,在MySQL5.5以前的版本"MyISAM"爲默認的存儲引擎。 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ rows in set (0.00 sec) mysql> mysql>
MariaDB [(none)]> SHOW ENGINES; #查看MariDB5.5.x版本支持的"插件式存儲引擎";不難發現"InnoDB"爲默認的存儲引擎(注意這是Percona公司基於Percona-XtraDB開發的)。 +--------------------+---------+----------------------------------------------------------------------------------+--------------+------+-------- ----+| Engine | Support | Comment | Transactions | XA | Savepoi nts |+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+-------- ----+| InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES || MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO || MyISAM | YES | Non-transactional engine with good performance and small data footprint | NO | NO | NO || BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO || PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO || CSV | YES | Stores tables as CSV files | NO | NO | NO || ARCHIVE | YES | gzip-compresses tables for a low storage footprint | NO | NO | NO || MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO || FEDERATED | YES | Allows to access tables on other MariaDB servers, supports transactions and more | YES | NO | YES || Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO |+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+-------- ----+10 rows in set (0.00 sec) MariaDB [(none)]>
七.MysSQL數據庫的四種發佈版本
alpha版:
內部測試版。α是希臘字母的第一個,表示最先的版本,通常用戶不要下載這個版本,這個版本包含不少BUG,功能也不全,主要是給開發人員和 測試人員測試和找BUG用的。
beta版:
公開測試版。β是希臘字母的第二個,顧名思義,這個版本比alpha版發佈得晚一些,主要是給「部落」用戶和忠實用戶測試用的,該版本任然存 在不少BUG,可是相對alpha版要穩定一些。這個階段版本的軟件還會不斷增長新功能。若是你是發燒友,能夠下載這個版本。(阿里巴巴,去哪網這些公司敢用,由於他們公司內部有高手能夠評估這個風險!)
rc版:
全寫:Release Candidate(候選版本),該版本又較beta版更進一步了,該版本功能再也不增長,和最終發佈版功能同樣。這個版本有點像最終發行版以前的一個相似 預覽版,這個的發佈就標明離最終發行版不遠了。做爲普通用戶,若是你很急着用這個軟件的話,也能夠下載這個版本。
GA版本:
GA版是軟件產品正式發佈的版本,也稱生產版本的產品。通常狀況下。企業的生產環節都會選擇GA版本的MySQL軟件,用於真實的生產環境中。偶爾有個別大型企業會追求新功能驅動而犧牲穩定性使用其餘版本,但這是個例。
關於版本的擴展小知識(瞭解便可):
不少軟件在正式發佈前都會發布一些預覽版或者測試版,通常都叫「beta版」或者 「rc版」,特別是開源軟件,甚至有「alpha版」,下面來解釋一下各個版本的意思。
alpha版:
內部測試版。α是希臘字母的第一個,表示最先的版本,通常用戶不要下載這個版本,這個版本包含不少BUG,功能也不全,主要是給開發人員和 測試人員測試和找BUG用的。
beta版:
公開測試版。β是希臘字母的第二個,顧名思義,這個版本比alpha版發佈得晚一些,主要是給「部落」用戶和忠實用戶測試用的,該版本任然存 在不少BUG,可是相對alpha版要穩定一些。這個階段版本的軟件還會不斷增長新功能。若是你是發燒友,能夠下載這個版本。
rc版:
全寫:Release Candidate(候選版本),該版本又較beta版更進一步了,該版本功能再也不增長,和最終發佈版功能同樣。這個版本有點像最終發行版以前的一個相似 預覽版,這個的發佈就標明離最終發行版不遠了。做爲普通用戶,若是你很急着用這個軟件的話,也能夠下載這個版本。
stable版:
穩定版。在開源軟件中,都有stable版,這個就是開源軟件的最終發行版,用戶能夠放心大膽的用了。
另外,對於商業軟件,還有一下版本:
RTM版:
全稱爲Release to Manufacture。工廠版。改版程序已經固定,就差工廠包裝、光盤印圖案等工做了。
OEM版:
廠商定製版。
EVAL版:
評估版。就是有30或者60天等使用期限的版本。
RTL版:
Retail.(零售版),這個版本就是真正發售的版本,有漂亮的包裝、光盤、說明書等東西和高昂的價格。
八.MySQL數據庫軟件命名介紹
例如,像mysql-5.7.16.tar.gz 的版本號解釋: 1>. 第1個數字(5)是主版本號,描述了文件格式。全部版本5發行都有相同文件格式 2>. 第2個數字(7)是發行級別。主版本號和發行級別組合到一塊兒便構成了髮型序列號。 3>. 第3個數字(16)是在此係列的版本號,隨每一個新分發遞增,一般你須要已經選擇的發行(release)的最新版本 4>. 後綴顯示發行的穩定級別,經過一系列後綴顯示如何改進穩定性,可能的後綴有:*alpha版.
九.MySQL版本選擇最終建議
企業生產場景選擇MySQL數據庫建議: 1>. 穩定版:選擇開源的社區版的穩定版GA版本 2>. 產品線:能夠選擇5.1或5.5 互聯網公司主流5.5,其次是5.1和5.6 3>. 選擇MySQL數據庫GA版發佈後6個月以上的GA版本。 (讓別人先去幫你實驗,等別人使用了半年左右發現穩定了再去使用,若是你不是數據庫大牛的建議不要選擇最新的!) 4>.要選擇先後幾個月沒有大的BUG修復的版本,而不是大量修復BUG的集中版本 (選擇的時候還要看是否頻繁的更新發布版本,若是每月都更新的話說明是有問題的,建議這連續的版本都不要選擇,都存在風險!) 5>.最好向後較長時間沒有更新發布的版本 6>.要考慮開發人員開發程序使用的版本是否兼容你選的版本 (由於是先有程序再有公司纔會請運維的,他們開發的程序以及肯定好了數據庫的版本啦!) 7>.做爲內部開發人員開發測試數據庫環境,跑大概3-6個月的事件 8>.優先企業非核心業務採用新版本的數據庫GA版本軟件 9>.向DBA高手請教,或者在及技術氛圍好的羣裏和你們一塊兒交流,使用真正的高手們用過的好用的GA版本產品 10>.通過上述工序以後,如果沒有重要的功能BUG或性能瓶頸,則能夠開始考慮做爲任何任務數據服務的後端數據庫件。
十.關係型數據庫的常見組件
數據庫:database 表:table 行:row 列:column 索引:index 視圖:view 用戶:user 權限:privilege 存儲過程:procedure 存儲函數:function 觸發器:trigger 事件調度器:event scheduler,任務計劃
十一.SQL語言的興起與語法標準
20世紀70年代,IBM開發出SQL,用於DB2
1981年,IBM推出SQL/DS數據庫
業內標準微軟和Sybase的T-SQL,Oracle的PL/SQL
SQL做爲關係型數據庫所使用的標準語言,最初是基於IBM的實如今1986年被批准的。1987年,「國際標準化組織(ISO)」把ANSI(美國國家標準化組織) SQL做爲國際標準。
SQL:ANSI SQL SQL-1986, SQL-1989, SQL-1992, SQL-1999, SQL-2003 SQL-2008, SQL-2011
十二.SQL語言規範
1.在數據庫系統中,SQL語句不區分大小寫(建議用大寫)
2.SQL語句可單行或多行書寫,以「;」結尾
3.關鍵詞不能跨多行或簡寫
4.用空格和縮進來提升語句的可讀性
5.子句一般位於獨立行,便於編輯,提升可讀性
6.註釋: SQL標準: /*註釋內容*/ 多行註釋 -- 註釋內容 單行註釋,注意有空格 MySQL註釋: #
十三.數據庫對象
數據庫的組件(對象):
數據庫、表、索引、視圖、用戶、存儲過程、函數、觸發器、事件調度器等
命名規則:
1.必須以字母開頭
2.可包括數字和三個特殊字符(# _ $)
3.不要使用MySQL的保留字
4.同一database(Schema)下的對象不能同名
十四.SQL語句分類
DDL: Data Defination Language 數據定義語言
CREATE,DROP,ALTER
DML: Data Manipulation Language 數據操縱語言
INSERT,DELETE,UPDATE
DCL:Data Control Language 數據控制語言
GRANT,REVOKE,COMMIT,ROLLBACK
DQL:Data Query Language 數據查詢語言
SELECT
十五.SQL語句構成
SQL語句構成: Keyword組成clause 多條clause組成語句
示例: SELECT * SELECT子句 FROM products FROM子句 WHERE price>400 WHERE子句 說明:一組SQL語句,由三個子句構成,SELECT,FROM和WHERE是關鍵字