本書主要包括MySQL的安裝與配置、數據庫的創建、數據表的創建、數據類型和運算符、MySQL函數、查詢數據、數據表的操作(插入、更新與刪除數據)、索引、存儲過程和函數、視圖、觸發器、用戶管理、數據備份與恢復、日志以及性能優化等。通過兩個綜合案例的數據庫設計,進一步講述MySQL在實際工作中的應用。
本書注重實戰操作,幫助讀者循序漸進地掌握MySQL中的各項技術。本書共有480個實例和14個綜合案例,還有大量的經典習題。下載文件中贈送了近20小時培訓班形式的視頻教學錄像,詳細講解了書中每一個知識點和每一個數據庫操作的方法和技巧。同時下載文件中還提供了本書所有例子的源代碼,讀者可以直接查看和調用。
本書適合MySQL數據庫初學者、MySQL數據庫開發人員和MySQL數據庫管理員,同時也能作為高等院校相關專業師生的教學用書。
劉增杰,IT博學專家,從事行業十余年,出版多部作品。
第 1 章
? 初識MySQL ?
MySQL是一個開放源代碼的數據庫管理系統(DBMS),它是由MySQL AB公司開發、并支持的。MySQL是一個跨平臺的開源關系型數據庫管理系統,廣泛地應用在Internet上的中小型網站開發中。本章主要介紹數據庫的基礎知識,通過本章的學習,讀者可以了解數據庫的基本概念、數據庫的構成和MySQL的基本知識。
l 了解什么是數據庫
l 掌握什么是表、數據類型和主鍵
l 熟悉數據庫的技術構成
l 熟悉什么是MySQL
l 掌握常見的MySQL工具
l 了解如何學習MySQL
1.1 數據庫基
數據庫由一批數據構成有序的集合,這些數據被存放在結構化的數據表里。數據表之間相互關聯,反映了客觀事物間的本質聯系。數據庫系統提供對數據的安全控制和完整性控制。本節將介紹數據庫中的一些基本概念,包括:數據庫的定義、數據表的定義和數據類型等。
1.1.1 什么是數據庫
數據庫的概念誕生于60年前,隨著信息技術和市場的快速發展,數據庫技術層出不窮,隨著應用的拓展和深入,數據庫的數量和規模越來越大,其誕生和發展給計算機信息管理帶來了一場巨大的革命。
數據庫的發展大致劃分為如下幾個階段:人工管理階段、文件系統階段、數據庫系統階段、高級數據庫階段。其種類大概有3種:層次式數據庫、網絡式數據庫和關系式數據庫。不同種類的數據庫按不同的數據結構來聯系和組織。
對于數據庫的概念,沒有一個固定的定義,隨著數據庫歷史的發展,定義的內容也有很大的差異,其中一種比較普遍的觀點認為,數據庫(DataBase,DB)是一個長期存儲在計算機內的、有組織的、有共享的、統一管理的數據集合。它是一個按數據結構來存儲和管理數據的計算機軟件系統,即數據庫包含兩層含義:保管數據的“倉庫”,以及數據管理的方法和技術。
數據庫的特點包括:實現數據共享,減少數據冗余;采用特定的數據類型;具有較高的數據獨立性;具有統一的數據控制功能。
1.1.2 表
在關系數據庫中,數據庫表是一系列二維數組的集合,用來存儲數據和操作數據的邏輯結構。它由縱向的列和橫向的行組成,行被稱為記錄,是組織數據的單位;列被稱為字段,每一列表示記錄的一個屬性,都有相應的描述信息,如數據類型、數據寬度等。
例如一個有關作者信息的名為authors的表中,每個列包含所有作者的某個特定類型的信息,比如“姓名”,而每行則包含了某個特定作者的所有信息:編號、姓名、性別、專業,如圖1.1所示。
編號 姓名 性別 專業
100
張三 f 計算機
101
李芬 m 會計
102 岳陽 f 園林
圖1.1 authors表的結構與記錄
1.1.3 數據類型
數據類型決定了數據在計算機中的存儲格式,代表不同的信息類型。常用的數據類型有:整數數據類型、浮點數數據類型、小數類型、二進制數據類型、日期/時間數據類型、字符串數據類型。
表中的每一個字段就是某種指定數據類型,比如圖1.1中“編號”字段為整數數據,“性別”字段為字符型數據。
1.1.4 主鍵
主鍵(Primary Key)又稱主碼,用于地標識表中的每一條記錄。可以定義表中的一列或多列為主鍵,主鍵列上不能有兩行相同的值,也不能為空值。假如,定義authors表,該表給每一個作者分配一個“作者編號”,該編號作為數據表的主鍵,如果出現相同的值,將提示錯誤,系統不能確定查詢的究竟是哪一條記錄;如果把作者的“姓名”作為主鍵,則不能出現重復的名字,這與現實中的情況不相符合,因此“姓名”字段不適合做為主鍵。
1.2 數據庫技術構成
數據庫系統由硬件部分和軟件部分共同構成,硬件主要用于存儲數據庫中的數據,包括計算機、存儲設備等。軟件部分則主要包括DBMS、支持DBMS運行的操作系統,以及支持多種語言進行應用開發的訪問技術等。本節將介紹數據庫的技術構成。
1.2.1 數據庫系統
數據庫系統有3個主要的組成部分。
l 數據庫:用于存儲數據的地方。
l 數據庫管理系統:用于管理數據庫的軟件。
l 數據庫應用程序:為了提高數據庫系統的處理能力所使用的管理數據庫的軟件補充。
數據庫提供了一個存儲空間用以存儲各種數據,可以將數據庫視為一個存儲數據的容器。一個數據庫可能包含許多文件,一個數據庫系統中通常包含許多數據庫。
數據庫管理系統(DataBase Management System,DBMS)是用戶創建、管理和維護數據庫時所使用的軟件,位于用戶與操作系統之間,對數據庫進行統一管理。DBMS能定義數據存儲結構,提供數據的操作機制,維護數據庫的安全性、完整性和性。
雖然已經有了DBMS,但是在很多情況下,DBMS無法滿足對數據管理的要求。數據庫應用程序(DataBase Application)的使用可以滿足對數據管理的更高要求,還可以使數據管理過程更加直觀和友好。數據庫應用程序負責與DBMS進行通信、訪問和管理DBMS中存儲的數據,允許用戶插入、修改、刪除DB中的數據。
數據庫系統如圖1.2所示:
圖1.2 數據庫系統
1.2.2 SQL語
對數據庫進行查詢和修改操作的語言叫做SQL。SQL的含義是結構化查詢語言(Structured Query Language)。SQL有許多不同的類型,有3個主要的標準:ANSI(美國國家標準機構)SQL,對ANSI SQL修改后在1992年采納的標準,稱為SQL-92或SQL2。最近的SQL-99標準,從SQL2擴充而來并增加了對象關系特征和許多其他新功能。其次,各大數據庫廠商提供不同版本的SQL,這些版本的SQL不但能包括原始的ANSI標準,而且在很大程度上支持SQL-92標準。
SQL包含以下4個部分。
(1)數據定義語言(DDL):DROP、CREATE、ALTER等語句。
(2)數據操作語言(DML):INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。
(3)數據查詢語言(DQL):SELECT語句。
(4)數據控制語言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK等語句。
下面是一條SQL語句的例子,該語句聲明創建一個名叫students的表:
CREATE TABLE students
student_id INT UNSIGNED,
name VARCHAR(30),
sex CHAR(1),
birth DATE,
PRIMARY KEY (student_id
;
該表包含4個字段,分別為student_id、name、sex、birth,其中student_id定義為表的主鍵。
現在只是定義了一張表格,但并沒有任何數據,接下來這條SQL聲明語句,將在students表中插入一條數據記錄:
INSERT INTO students (student_id, name, sex, birth
VALUES (41048101, 'Lucy Green', ’1’, ’1990-02-14’);
執行完該SQL語句之后,students表中就會增加一行新記錄,該記錄中字段student_id的值為41048101,name字段的值為Lucy Green,sex字段值為1,birth字段值為1990-02-14。
再使用SELECT查詢語句獲取剛才插入的數據,如下:
SELECT name FROM students WHERE student_id = 41048101;
---------------
name
--------------
Lucy Green
--------------
上面簡單列舉了常用的數據庫操作語句,在這里給讀者一個直觀的印象,讀者可能還不能理解,接下來會在學習MySQL的過程中詳細介紹這些知識。
1.2.3 數據庫訪問接口
不同的程序設計語言會有各自不同的數據庫訪問接口,程序語言通過這些接口,執行SQL語句,進行數據庫管理。主要的數據庫訪問接口有:
1. ODBC
Open Database Connectivity(ODBC,開放數據庫互連)技術為訪問不同的SQL數據庫提供了一個共同的接口。ODBC使用SQL作為訪問數據的標準。這一接口提供了較大限度的互操作性:一個應用程序可以通過共同的一組代碼訪問不同的 SQL 數據庫管理系統(DBMS)。
一個基于ODBC的應用程序對數據庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數據庫操作由對應的DBMS的ODBC驅動程序完成。也就是說,不論是Access、MySQL還是Oracle數據庫,均可用ODBC API進行訪問。由此可見,ODBC的較大優點是能以統一的方式處理所有的數據庫。
2. JDBC
Java Data Base Connectivity(JDBC,Java數據庫連接)用于Java應用程序連接數據庫的標準方法,是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。
3. ADO.NET
ADO.NET是微軟在.NET框架下開發設計的一組用于和數據源進行交互的面向對象類庫。ADO.NET提供了對關系數據、XML和應用程序數據的訪問,允許和不同類型的數據源以及數據庫進行交互。
4. PDO
PDO(PHP Data Object)為PHP訪問數據庫定義了一個輕量級的、一致性的接口,它提供了一個數據訪問抽象層,這樣,無論使用什么數據庫,都可以通過一致的函數執行查詢和獲取數據。PDO是PHP 5新加入的一個重大功能。
針對不同的程序語言,MySQL提供了不同數據庫的訪問連接驅動,讀者可以在下載頁面(dev.MySQL.com/downloads/)下載相關驅動。
1.3 什么是MySQL
MySQL是一個小型關系數據庫管理系統,與其他大型數據庫管理系統(例如Oracle、DB2、SQL Server等)相比,MySQL規模小、功能有限,但是它體積小、速度快、成本低,且它提供的功能對稍微復雜的應用來說已經夠用,這些特性使得MySQL成為世界上受歡迎的開放源代碼數據庫。本節將介紹MySQL的特點。
1.3.1 客戶機-服務器軟件
主從式架構(Client-server model)或客戶端-服務器(Client/Server)結構簡稱C/S結構,是一種網絡架構,通常在該網絡架構下軟件分為客戶端(Client)和服務器(Server)。
服務器是整個應用系統資源的存儲與管理中心,多個客戶端則各自處理相應的功能,共同實現完整的應用。在客戶/服務器結構中,客戶端用戶的請求被傳送到數據庫服務器,數據庫服務器進行處理后,將結果返回給用戶,從而減少了網絡數據傳輸量。
用戶使用應用程序時,首先啟動客戶端,通過有關命令告知服務器進行連接以完成各種操作,而服務器則按照此請示提供相應的服務。每一個客戶端軟件的實例都可以向一個服務器或應用程序服務器發出請求。
這種系統的特點就是,客戶端和服務器程序不在同一臺計算機上運行,這些客戶端和服務器程序通常歸屬不同的計算機。
主從式架構通過不同的途徑應用于很多不同類型的應用程序,比如,現在人們最熟悉的在因特網上使用的網頁。例如,當顧客想要在站上買書的時候,電腦和網頁瀏覽器就被當作一個客戶端,同時,組成的電腦、數據庫和應用程序就被當作服務器。當顧客的網頁瀏覽器向請求搜尋數據庫相關的圖書時,服務器從的數據庫中找出所有該類型的圖書信息,結合成一個網頁,再發送回顧客的瀏覽器。服務器端一般使用高性能的計算機,并配合使用不同類型的數據庫,比如Oracle、Sybase或者是MySQL等;客戶端需要安裝專門的軟件,比如專門開發的客戶端工具瀏覽器等。
1.3.2 MySQL版本
針對不同用戶,MySQL分為兩個不同的版本:
l MySQL Community Server(社區版):該版本免費,但是官方不提供技術支持。
l MySQL Enterprise Server(企業版服務器):它能夠以很高性價比為企業提供數據倉庫應用,支持ACID事物處理,提供完整的提交、回滾、崩潰恢復和行級鎖定功能。但是該版本需付費使用,官方提供電話技術支持。
MySQL Cluster主要用于架設集群服務器,需要在社區版或企業版基礎上使用。
MySQL的命名機制由3個數字和1個后綴組成,例如:MySQL-5.7.10。
(1)第1個數字(5)是主版本號,描述了文件格式,所有版本5的發行版都有相同的文件格式。
(2)第2個數字(7)是發行級別,主版本號和發行級別組合在一起便構成了發行序列號。
(3)第3個數字(10)是在此發行系列的版本號,隨每次新分發版本遞增。通常選擇已經發行的近期版本。
在MySQL開發過程中,同時存在多個系列,每個處在成熟度的不同階段。
(1)MySQL 5.7是近期開發的穩定(GA)系列,是將執行新功能的系列,目前已經可以正常使用。
(2)MySQL 5.6是比較穩定(GA)系列。只針對漏洞修復重新,沒有增加會影響穩定性的新功能。
(3)MySQL 5.1是前一穩定(產品質量)系列。只針對嚴重漏洞修復和安全修復重新,沒有增加會影響該系列的重要功能。
對于MySQL 4.1、4.0和3.23等低于5.0的老版本,官方將不再提供支持。而所有的MySQL(Current Generally Available Release)版本已經經過嚴格標準的測試,可以保障其安全地使用。針對不同的操作系統,讀者可以在MySQL官方下載頁面(dev.MySQL.com/downloads/)下載到相應的安裝文件。
1.3.3 MySQL的優勢
MySQL的主要優勢如下:
(1)速度:運行速度快。
(2)價格:MySQL對多數個人來說是免費的。
(3)容易使用:與其他大型數據庫的設置和管理相比,其復雜程度較低,易于學習。
(4)可移植性:能夠工作在眾多不同的系統平臺上,例如:Windows、Linux、Unix、Mac OS等。
(5)豐富的接口:提供了用于C、C 、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等語言的API。
(6)支持查詢語言:MySQL可以利用標準SQL語法和支持ODBC(開放式數據庫連接)的應用程序。
(7)安全性和連接性:十分靈活和安全的權限和密碼系統,允許基于主機的驗證。連接到服務器時,所有的密碼傳輸均采用加密形式,從而保障了密碼安全。并且由于MySQL是網絡化的,因此可以在因特網上的任何地方訪問,提高數據共享的效率。
1.3.4 MySQL 5.7的新功能
和MySQL5.6相比,MySQL5.7的新功能主要包括以下幾個方面。
1. 支持JSON
JSON(Java Script Object Notation的縮寫)是一種存儲信息的格式,可以很好地替代XML。從MySQL 5.7.8版本開始,MySQL將支持JSON,而在此版本之前,只能通過strings之類的通用形式來存儲JSON文件,這樣做的缺陷很明顯,就是必須要自行確認和解析數據、解決更新中的困難、在執行插入操作時忍受較慢的速度。
2. 性能和可擴展性
改進InnoDB的可擴展性和臨時表的性能,從而實現更快的網絡和大數據加載等操作。
3. 改進復制以提高可用性的性能
改進復制包括多源復制、多從線程增強、在線GTIDs和增強的半同步復制。
4. 性能模式提供更好的視角
增加了許多新的監控功能,以減少空間和過載,使用新的SYS模式顯著提高易用性。
5. 安全
以安全及時為宗旨,提供了很多新的功能,從而保障數據庫的安全。
6. 優化
重寫了大部分解析器、優化器和成本模型,這提高了可維護性、可擴展性和性能。
7. GIS
MySQL 5.7 全新的功能,包括 InnoDB 空間索引,使用 Boost.Geometry,同時提高完整性和標準符合性。
1.4 MySQL工具
MySQL數據庫管理系統提供了許多命令行工具,這些工具可以用來管理MySQL服務器、對數據庫進行訪問控制、管理MySQL用戶以及數據庫備份和恢復工具等。而且MySQL提供了圖形化的管理工具,這使得對數據庫的操作更加簡單。本節將為讀者介紹這些工具的作用。
1.4.1 MySQL命令行實用程序
MySQL服務器端實用工具程序如下:
(1)mysqld:SQL后臺程序(即MySQL服務器進程)。該程序必須運行之后,客戶端才能通過連接服務器來訪問數據庫。
(2)mysqld_safe:服務器啟動腳本。在UNIX和NetWare中推薦使用mysqld_safe來啟動mysqld服務器。mysqld_safe增加了一些安全特性,例如當出現錯誤時重啟服務器并向錯誤日志文件寫入運行時間信息。
(3)mysql.server:服務器啟動腳本。在UNIX中的MySQL分發版包括mysql.server腳本。該腳本用于使用包含為特定級別的、運行啟動服務的腳本的、運行目錄的系統。它調用mysqld_safe來啟動MySQL服務器。
(4)mysql_multi:服務器啟動腳本,可以啟動或停止系統上安裝的多個服務器。
(5)myisamchk:用來描述、檢查、優化和維護MyISAM表的實用工具。
(6)mysqlbug:MySQL缺陷報告腳本。它可以用來向MySQL郵件系統發送缺陷報告。
(7)mysql_install_db:該腳本用默認權限創建MySQL授權表。通常只是在系統上首次安裝MySQL時執行一次。
MySQL客戶端實用工具程序如下:
(1)myisampack:壓縮MyISAM表以產生更小的只讀表的一個工具。
(2)mysql:交互式輸入SQL語句或從文件以批處理模式執行它們的命令行工具。
(3)mysqlaccess:檢查訪問主機名、用戶名和數據庫組合的權限的腳本。
(4)MySQLadmin:執行管理操作的客戶程序,例如創建或刪除數據庫,重載授權表,將表刷新到硬盤上,以及重新打開日志文件。MySQLadmin還可以用來檢索版本、進程,以及服務器的狀態信息。
(5)mysqlbinlog:從二進制日志讀取語句的工具。在二進制日志文件中包含執行過的語句,可用來幫助系統從崩潰中恢復。
(6)mysqlcheck:檢查、修復、分析以及優化表的表維護客戶程序。
(7)mysqldump:將MySQL數據庫轉儲到一個文件(例如SQL語句或tab分隔符文本文件)的客戶程序。
(8)mysqlhotcopy:當服務器在運行時,快速備份MyISAM或ISAM表的工具。
(9)mysql import:使用LOAD DATA INFILE將文本文件導入相關表的客戶程序。
(10)mysqlshow:顯示數據庫、表、列以及索引相關信息的客戶程序。
(11)perror:顯示系統或MySQL錯誤代碼含義的工具。
1.4.2 MySQL Workbench
MySQL Workbench是下一代可視化數據庫設計軟件,MySQL Workbench為數據庫管理員和開發人員提供了一整套可視化數據庫操作環境,主要功能有:
l 數據庫設計和模型建立。
l SQL開發(取代MySQL Query Browser)。
l 數據庫管理(取代MySQL Administrator)。
MySQL Workbench有兩個版本:
(1)MySQL Workbench Community Edition(也叫MySQL Workbench OSS,社區版),MySQL Workbench OSS是在GPL證書下的開源社區版本。
(2)MySQL Workbench Standard Edition(也叫MySQL Workbench SE,商業版),MySQL Workbench SE是按年收費的商業版本。
截至本書完稿時,近期版本為MySQL Workbench 5.2.34。一些出版時間較早的MySQL教程中會提到圖形化的工具MySQL Query Browser和MySQL Administrator。隨著MySQL的發展,Oracle公司使用更高效、便捷的Workbench替換掉了這兩個工具,目前官方已經不再提供MySQL Query Browser和MySQL Administrator的技術支持和更新,但是仍然可以在使用舊版本MySQL時使用它們。
1.5 如何學習MySQL
在學習MySQL數據庫之前,很多讀者都會問如何才能學習好MySQL 5.7的相關技能呢?下面就來講述學習MySQL的方法。
1. 培養興趣
興趣是好的老師,不論學習什么知識,興趣都可以極大地提高學習效率。當然學習MySQL 5.7也不例外。
2. 夯實基
計算機領域的技術非常強調基礎,剛開始學習可能還認識不到這一點,隨著技術應用的深入,只有有著扎實的基礎功底,才能在技術的道路上走得更快、更遠。對于MySQL的學習來說,SQL語句是其中最為基礎的部分,很多操作都是通過SQL語句來實現的。所以在學習的過程中,讀者要
書很不錯,哈哈
不錯不錯,味道好極了........
這本書還可以
非常不錯,下次再來買
幫公司乘務員買的,我沒看。
質量特別好
還不錯的一本書,內容可以,能學到東西!就是教程采用的數據庫版本跟不上更新速度了,不過應該都一樣的。不影響。其他都比較好!不過書中的資源連接和技術QQ號都是空的!沒人。還有,快遞綜合服務差評!!!提示:資料需要發郵箱索取,書是不含光盤的,這點贊一個,節約資源。
還不錯!!!!!
還行 包裝也還行
不錯 內容豐富
包裝太爛了,把書皮和書的前面幾頁都弄壞了,折的不像樣子了!不過書還行
這本書三天都看完了,寫得太差了,講的都表面一帶而過,沒有什么實際意義,你說做工具書查看,也不行,不詳細,你說從頭學習,又好多都沒講。是這買的最差的一本書了。我只是實話實說。如果要從入門,可以選擇其它的書。要精通,一點都不精通。你如果看了這個書,你對mysql也入不了門。哪些好評和銷量,我懷疑是刷出來的。
很適合很好
為了學習而買
不錯,很實用!
【表情】【表情】【表情】【表情】【表情】
總之還不錯。
ok ok
選了幾本最后還是選擇了這本 感覺這本更適合自己
從發貨到收貨一共經歷了7天,包裝是破的,好像被別人打開了,封皮和內頁破損,不過還好能看,說好的視頻教學版呢,光盤嘞?
我期待持久的mysql5.7書籍終于出版了!
很實用的書,如果示例更多加好了,希望內容更細。
一般都是在書店看了之后覺得好才來買的超喜歡在當當買書的尤其是便宜包裝好快遞快還比書店便宜
好書!強烈建議書里給張小票,不然我都沒東西當書簽了
很厚的一本,里面的內容很好,很適合初學者,很滿意
貨沒收到,但當當處理很快,服務態度好,這年頭服務好,處理問題快比什么都好