MySQL數據庫掃盲篇

            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> 
 
mysql> SHOW ENGINES;   #查看MySQL8.0.x版本支持的"插件式存儲引擎";不難發現"InnoDB"爲默認的存儲引擎,在MySQL5.5以前的版本"MyISAM"爲默認的存儲引擎。
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)]> 
MariaDB [(none)]> SHOW ENGINES;  #查看MariDB5.5.x版本支持的"插件式存儲引擎";不難發現"InnoDB"爲默認的存儲引擎(注意這是Percona公司基於Percona-XtraDB開發的)。

 

 

七.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是關鍵字
相關文章
相關標籤/搜索