導讀:MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬于Oracle旗下產品。MySQL是最流行的關系型數據庫管理系統之一,許多全球規模龐大、發展迅速的組織,Facebook、google、Adobe、Alcatel Lucent和ZAppos等都依靠MySQL來管理數據,為其高容量網站、關鍵業務系統和套裝軟件提供支持。
作者:王宏志 何震瀛 王鵬 李春靜
來源:華章科技
01 關系數據庫MySQL概述
MySQL有如下特點,這些特點使得其得到了廣泛應用。
1. 簡單易用
MySQL是一個高性能且相對簡單的數據庫系統,與一些大型系統的設置和管理相比,其復雜程度較低。
2. 價格低
MySQL對多數個人用戶來說是免費的。
3. 小巧
MySQL數據庫的4.1.1發行版只有21MB,安裝完成也僅僅51MB。
4. 支持查詢語言
MySQL支持SQL(結構化查詢語言)。SQL是一種所有現代數據庫系統都選用的語言。SQL支持ODBC(開放式數據庫連接)的應用程序,ODBC是Microsoft開發的一種數據庫通信協議。
5. 性能
MySQL數據庫沒有用戶數的限制,多個客戶機可同時使用同一個數據庫。可利用幾個輸入查詢并查看結果的界面來交互式地訪問MySQL。這些界面有命令行客戶機程序、Web瀏覽器或X Window System客戶機程序。此外,還有由各種語言(如C、C++、Eiffel、JAVA、Perl、php、Python、Ruby和Tcl)編寫的界面。因此,可以選擇使用已編好的客戶機程序或編寫自己的客戶機應用程序。
6. 連接性和安全性
MySQL是完全網絡化的,可在因特網上的任何地方訪問其數據庫,因此,可以和任何地方的任何人共享數據庫。而且MySQL支持訪問控制,可以控制哪些人不能看到數據。
7. 可移植性
MySQL可運行在各種版本的UNIX以及其他非UNIX的系統(例如windows和OS/2)上。MySQL可運行在從家用PC到高級的服務器上。
8. 開放式的分發
MySQL容易獲得:只要使用Web瀏覽器即可訪問官網下載獲得。如果不能理解其中某個算法是如何起作用的,或者對某個算法感到好奇,可以將其源代碼取來,對源代碼進行分析。如果不喜歡某些算法,還可以更改它。
9. 速度快
MySQL運行速度很快。曾經有開發者聲稱MySQL可能是目前能得到的最快的數據庫。
02 SQL概述
SQL最早的版本是由IBM開發的,它最初被叫作Sequel,在20世紀70年代早期是System R項目的一部分。Sequel語言發展至今,其名稱已變為SQL(Structured Query Language,結構化查詢語言)。它是一種特定目的編程語言,用于管理關系數據庫管理系統或在關系流數據管理系統中進行流處理。
SQL基于關系代數和元組關系演算,包括一個數據定義語言和數據操縱語言。SQL的范圍包括數據的插入/查詢/更新和刪除、數據庫模式的創建和修改,以及數據訪問控制。盡管SQL經常被描述為一種聲明式編程語言(4GL,即第四代語言),但也含有過程式編程的元素。
SQL是對埃德加·科德關系模型的第一個商業化語言實現,這一模型于1970年在一篇具有影響力的論文《一個對于大型共享型數據庫的關系模型》中被描述。盡管SQL并非完全按照科德的關系模型設計,但其依然成為應用最為廣泛的數據庫語言。
SQL在1986年成為美國國家標準學會(ANSI)的一項標準,在1987年成為國際標準化組織(ISO)標準。此后,這一標準經過了一系列的增訂,加入了大量新特性。雖然有這一標準的存在,但大部分SQL代碼在不同的數據庫系統中并不具有完全的跨平臺性。
MySQL非常友好地支持SQL語言,本文只給出簡單的舉例,有關詳細的SQL語法及舉例,可參見官網:
https://dev.mysql.com/doc/refman/8.0/en/sql-syntax.html
官網按SQL語法功能分為8個部分,分別是:
- 數據定義語句(Data Definition Statement)
- 數據處理語句(Data Manipulation Statement)
- 事務和鎖定聲明(Transactional and Locking Statement)
- 復制語句(Replication Statement)
- 預處理SQL語句語法(Prepared SQL Statement Syntax)
- 復合語句語法(Compound-Statement Syntax)
- 數據庫管理聲明(Database Administration Statement)
- 效用聲明(Utility Statement)
下文將對前2個部分舉例講解。
03 數據定義語句
數據庫中的關系集合必須由數據定義語句指定給系統,主要提供表相關的定義關系模式、刪除關系以及修改關系模式的命令。例如:數據庫、表、表空間、觸發器、事件、索引及函數的定義、更改操作等。
【例1】指定表空間創建庫表,并在已有表的基礎上增加列,查看表結構。
1. 建立名為ts_1的表空間
mysql>CREATETABLESPACEts_1ADDDATAFILE'ts_1.ibd'Engine=InnoDB;QueryOK,0rowsaffected(0.11sec)
2. 建立名為testq的數據庫
mysql>CREATEDATABASEtestq;QueryOK,1rowaffected(0.00sec)
3. 切換至名為testq的數據庫
mysql>usetestq;Databasechanged
4. 建立表,并指定表使用的表空間及引擎
mysql>CREATETABLEt1(->c1INTSTORAGEDISK,#數據存儲于磁盤->c2INTSTORAGEMEMORY#數據基于內存->)TABLESPACEts_1ENGINEINNODB;#指定表空間ts_1及引擎INNODBQueryOK,0rowsaffected(0.34sec)
5. 向表t1中增加列c3,類型為VARCHAR,長度為10
mysql>ALTERTABLEt1ADDc3VARCHAR(10);QueryOK,0rowsaffected(0.52sec)Records:0Duplicates:0Warnings:0
6. 查看表t1的結構
mysql>DESCt1;+-------+-------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+-------------+------+-----+---------+-------+|c1|int(11)|YES||NULL|||c2|int(11)|YES||NULL|||c3|varchar(10)|YES||NULL||+-------+-------------+------+-----+---------+-------+3rowsinset(0.00sec)
- 注意
在my.ini文件中設置:
# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB
否則會出現“1286 Unknown storage engine 'InnoDB'”錯誤。
成功啟動后,通過SHOW ENGINES查看引擎是否在運行:
04 數據處理語句
數據處理語句主要提供數據庫表中相關數據元組的插入、刪除、修改和查詢等操作。
【例2】向已有的表t1中插入、查詢、更改和刪除數據。
1. 向表t1中插入2條數據,其中第2列數據是第1列數據的2倍
mysql>INSERTINTOt1(c1,c2,c3)VALUES(1,c1*2,'a'),(2,c1*2,'b');QueryOK,2rowsaffected(0.10sec)Records:2Duplicates:0Warnings:0
2. 查詢表t1中所有的數據
mysql>SELECT*FROMt1;+------+------+------+|c1|c2|c3|+------+------+------+|1|2|a||2|4|b|+------+------+------+2rowsinset(0.00sec)
3. 更新表t1中的數據,其中當c1等于2時,對應的c2列的數據乘以3,對應的c3列的值更改為updateb
mysql>UPDATEt1SETc2=c1*3,c3='updateb'->WHEREc1=2;QueryOK,1rowaffected(0.11sec)Rowsmatched:1Changed:1Warnings:0
4. 當c1等于2時,查詢表t1中對應的元組的數據
mysql>SELECT*FROMt1WHEREc1=2;+------+------+---------+|c1|c2|c3|+------+------+---------+|2|6|updateb|+------+------+---------+1rowinset(0.05sec)
5. 當c1等于2時,刪除表t1中對應的元組的數據
mysql>DELETEFROMt1WHEREc1=2;QueryOK,1rowaffected(0.10sec)
用SELECT語句查詢表t1,發現c1=2對應的元組的數據都已經被刪除。
mysql>SELECT*FROMt1;+------+------+------+|c1|c2|c3|+------+------+------+|1|2|a|+------+------+------+1rowinset(0.00sec)
關于作者:王宏志,哈爾濱工業大學計算機科學與技術學院教授、博士生導師,英才學院副院長。研究方向為大數據、數據科學、數據管理與分析。在VLDB、SIGMOD等國內外重要會議和期刊上發表學術論文200余篇,出版學術專著兩本,其論文被SCI收錄50余次,他引千余次。
何震瀛,博士,復旦大學計算機科學學院副教授,中國計算機學會數據庫專業委員會委員、大數據專業委員會通信委員。主要研究興趣是數據管理和數據分析等。
王鵬,畢業于哈爾濱工業大學軟件工程專業,研究生學歷。曾就職于中國普天信息技術研究院,并擔任架構師、技術總監等職使。曾代表企業主導網絡存儲國家行業標準制定,擁有相關專利3項。
李春靜,工學碩士,現任北京華育興業科技有限公司大數據講師,并承擔高校大數據技術與應用資源建設工作。主要從事Hadoop、HBase、Hive、Spark、大數據庫、機器學習等課程研發工作。
本文摘編自《大數據管理系統原理與技術》,經出版方授權發布。
延伸閱讀《大數據管理系統原理與技術》
推薦語:本書介紹了多種數據庫管理系統的基本概念以及代表性數據庫管理系統的使用和優化方法,覆蓋了傳統的關系數據庫、數據倉庫,以及列族、鍵值、文檔、圖等NoSQL數據庫系統。