本書主要包括MySQL的安裝與配置、數據庫的創建、數據表的創建、數據類型和運算符、MySQL函數、查詢數據、數據表的操作(插入、更新與刪除數據)、索引、存儲過程和函數、視圖、觸發器、用戶管理、數據備份與恢復、日志以及性能優化等。通過兩個綜合案例的數據庫設計,進一步講述MySQL在實際工作中的應用。
本書注重實戰操作,幫助讀者循序漸進地掌握MySQL中的各項技術。本書共有480個實例和14個綜合案例,還有大量的經典習題。下載文件中贈送了近20小時培訓班形式的視頻教學錄像,詳細講解了書中每一個知識點和每一個數據庫操作的方法和技巧。同時下載文件中還提供了本書所有例子的源代碼,讀者可以直接查看和調用。
本書適合MySQL數據庫初學者、MySQL數據庫開發人員和MySQL數據庫管理員,同時也能作為高等院校相關專業師生的教學用書。
劉增杰,IT博學專家,從事行業十余年,出版多部作品。
目 錄
第1章 初識MySQL 1
1.1 數據庫基礎 1
1.1.1 什么是數據庫 1
1.1.2 表 2
1.1.3 數據類型 2
1.1.4 主鍵 2
1.2 數據庫技術構成 3
1.2.1 數據庫系統 3
1.2.2 SQL語言 4
1.2.3 數據庫訪問接口 5
1.3 什么是MySQL 6
1.3.1 客戶機-服務器軟件 6
1.3.2 MySQL版本 6
1.3.3 MySQL的優勢 7
1.3.4 MySQL 5.7的新功能 8
1.4 MySQL工具 8
1.4.1 MySQL命令行實用程序 9
1.4.2 MySQL Workbench 10
1.5 如何學習MySQL 10
第2章 MySQL的安裝與配置 12
2.1 Windows平臺下安裝與配置MySQL 5.7 12
2.1.1 安裝MySQL 5.7 12
2.1.2 配置MySQL 5.7 18
2.2 啟動服務并登錄MySQL數據庫 22
2.2.1 啟動MySQL服務 22
2.2.2 登錄MySQL數據庫 24
2.2.3 配置Path變量 27
2.3 MySQL常用圖形管理工具 28
2.4 Linux平臺下安裝與配置MySQL 5.7 29
2.4.1 Linux操作系統下的MySQL版本介紹 29
2.4.2 安裝和配置MySQL的RPM包 31
2.4.3 安裝和配置MySQL的源碼包 35
2.5 專家解惑 36
2.6 經典習題 36
第3章 數據庫的基本操作 37
3.1 創建數據庫 37
3.2 刪除數據庫 39
3.3 數據庫存儲引擎 39
3.3.1 MySQL存儲引擎簡介 39
3.3.2 InnoDB存儲引擎 41
3.3.3 MyISAM存儲引擎 42
3.3.4 MEMORY存儲引擎 43
3.3.5 存儲引擎的選擇 43
3.4 綜合案例——數據庫的創建和刪除 44
3.5 專家解惑 46
3.6 經典習題 46
第4章 數據表的基本操作 47
4.1 創建數據表 47
4.1.1 創建表的語法形式 47
4.1.2 使用主鍵約束 49
4.1.3 使用外鍵約束 50
4.1.4 使用非空約束 51
4.1.5 使用性約束 52
4.1.6 使用默認約束 53
4.1.7 設置表的屬性值自動增加 53
4.2 查看數據表結構 54
4.2.1 查看表基本結構語句DESCRIBE 54
4.2.2 查看表詳細結構語句SHOW CREATE TABLE 55
4.3 修改數據表 56
4.3.1 修改表名 57
4.3.2 修改字段的數據類型 57
4.3.3 修改字段名 58
4.3.4 添加字段 59
4.3.5 刪除字段 62
4.3.6 修改字段的排列位置 63
4.3.7 更改表的存儲引擎 64
4.3.8 刪除表的外鍵約束 65
4.4 刪除數據表 67
4.4.1 刪除沒有被關聯的表 67
4.4.2 刪除被其他表關聯的主表 67
4.5 綜合案例——數據表的基本操作 69
4.6 專家解惑 77
4.7 經典習題 78
第5章 數據類型和運算符 80
5.1 MySQL數據類型介紹 80
5.1.1 整數類型 80
5.1.2 浮點數類型和定點數類型 82
5.1.3 日期與時間類型 84
5.1.4 文本字符串類型 96
5.1.5 二進制字符串類型 101
5.2 如何選擇數據類型 104
5.3 常見運算符介紹 105
5.3.1 運算符概述 105
5.3.2 算術運算符 106
5.3.3 比較運算符 107
5.3.4 邏輯運算符 116
5.3.5 位運算符 119
5.3.6 運算符的優先級 122
5.4 綜合案例——運算符的使用 123
5.5 專家解惑 125
5.6 經典習題 126
第6章 MySQL函數 127
6.1 MySQL函數簡介 127
6.2 數學函數 128
6.2.1 值函數ABS(x)和返回圓周率的函數PI() 128
6.2.2 平方根函數SQRT(x)和求余函數MOD(x,y) 128
6.2.3 獲取整數的函數CEIL(x)、CEILING(x)和FLOOR(x) 129
6.2.4 獲取隨機數的函數RAND()和RAND(x) 130
6.2.5 函數ROUND(x)、ROUND(x,y)和TRUNCATE(x,y) 130
6.2.6 符號函數SIGN(x) 131
6.2.7 冪運算函數POW(x,y)、POWER(x,y)和EXP(x) 132
6.2.8 對數運算函數LOG(x)和LOG10(x) 132
6.2.9 角度與弧度相互轉換的函數RADIANS(x)和DEGREES(x) 133
6.2.10 正弦函數SIN(x)和反正弦函數ASIN(x) 133
6.2.11 余弦函數COS(x)和反余弦函數ACOS(x) 134
6.2.12 正切函數、反正切函數和余切函數 134
6.3 字符串函數 135
6.3.1 計算字符串字符數的函數和字符串長度的函數 135
6.3.2 合并字符串函數CONCAT(s1,s2,…)、CONCAT_WS(x,s1,s2,…) 136
6.3.3 替換字符串的函數INSERT(s1,x,len,s2) 137
6.3.4 字母大小寫轉換函數 137
6.3.5 獲取指定長度的字符串的函數LEFT(s,n)和RIGHT(s,n) 138
6.3.6 填充字符串的函數LPAD(s1,len,s2)和RPAD(s1,len,s2) 139
6.3.7 刪除空格的函數LTRIM(s)、RTRIM(s)和TRIM(s) 139
6.3.8 刪除指定字符串的函數TRIM(s1 FROM s) 140
6.3.9 重復生成字符串的函數REPEAT(s,n) 141
6.3.10 空格函數SPACE(n)和替換函數REPLACE(s,s1,s2) 141
6.3.11 比較字符串大小的函數STRCMP(s1,s2) 142
6.3.12 獲取子串的函數SUBSTRING(s,n,len)和MID(s,n,len) 142
6.3.13 匹配子串開始位置的函數 143
6.3.14 字符串逆序的函數REVERSE(s) 143
6.3.15 返回指定位置的字符串的函數 144
6.3.16 返回指定字符串位置的函數FIELD(s,s1,s2,…) 144
6.3.17 返回子串位置的函數FIND_IN_SET(s1,s2) 145
6.3.18 選取字符串的函數MAKE_SET(x,s1,s2,…) 145
6.4 日期和時間函數 146
6.4.1 獲取當前日期的函數和獲取當前時間的函數 146
6.4.2 獲取當前日期和時間的函數 146
6.4.3 UNIX時間戳函數 147
6.4.4 返回UTC日期的函數和返回UTC時間的函數 148
6.4.5 獲取月份的函數MONTH(date)和MONTHNAME(date) 148
6.4.6 獲取星期的函數DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d) 149
6.4.7 獲取星期數的函數WEEK(d)和WEEKOFYEAR(d) 150
6.4.8 獲取天數的函數DAYOFYEAR(d)和DAYOFMONTH(d) 151
6.4.9 獲取年份、季度、小時、分鐘和秒鐘的函數 151
6.4.10 獲取日期的指定值的函數EXTRACT(type FROM date) 152
6.4.11 時間和秒鐘轉換的函數 153
6.4.12 計算日期和時間的函數 153
6.4.13 將日期和時間格式化的函數 156
6.5 條件判斷函數 159
6.5.1 IF(expr,v1,v2)函數 159
6.5.2 IFNULL(v1,v2)函數 160
6.5.3 CASE函數 160
6.6 系統信息函數 161
6.6.1 獲取MySQL版本號、連接數和數據庫名的函數 161
6.6.2 獲取用戶名的函數 163
6.6.3 獲取字符串的字符集和排序方式的函數 163
6.6.4 獲取一個自動生成的ID值的函數 164
6.7 加/解密函數 166
6.7.1 加密函數PASSWORD(str) 166
6.7.2 加密函數MD5(str) 167
6.7.3 加密函數ENCODE(str,pswd_str) 167
6.7.4 解密函數DECODE(crypt_str,pswd_str) 167
6.8 其他函數 168
6.8.1 格式化函數FORMAT(x,n) 168
6.8.2 不同進制的數字進行轉換的函數 168
6.8.3 IP地址與數字相互轉換的函數 169
6.8.4 加鎖函數和解鎖函數 170
6.8.5 重復執行指定操作的函數 170
6.8.6 改變字符集的函數 171
6.8.7 改變數據類型的函數 172
6.9 綜合案例——MySQL函數的使用 172
6.10 專家解惑 176
6.11 經典習題 176
第7章 查詢數據 178
7.1 基本查詢語句 178
7.2 單表查詢 180
7.2.1 查詢所有字段 181
7.2.2 查詢指定字段 182
7.2.3 查詢指定記錄 184
7.2.4 帶IN關鍵字的查詢 185
7.2.5 帶BETWEEN AND的范圍查詢 187
7.2.6 帶LIKE的字符匹配查詢 188
7.2.7 查詢空值 190
7.2.8 帶AND的多條件查詢 191
7.2.9 帶OR的多條件查詢 192
7.2.10 查詢結果不重復 193
7.2.11 對查詢結果排序 195
7.2.12 分組查詢 198
7.2.13 使用LIMIT限制查詢結果的數量 203
7.3 使用聚合函數查詢 205
7.3.1 COUNT()函數 205
7.3.2 SUM()函數 206
7.3.3 AVG()函數 207
7.3.4 MAX()函數 208
7.3.5 MIN()函數 209
7.4 連接查詢 210
7.4.1 內連接查詢 210
7.4.2 外連接查詢 214
7.4.3 復合條件連接查詢 216
7.5 子查詢 217
7.5.1 帶ANY、SOME關鍵字的子查詢 217
7.5.2 帶ALL關鍵字的子查詢 218
7.5.3 帶EXISTS關鍵字的子查詢 218
7.5.4 帶IN關鍵字的子查詢 220
7.5.5 帶比較運算符的子查詢 221
7.6 合并查詢結果 223
7.7 為表和字段取別名 225
7.7.1 為表取別名 226
7.7.2 為字段取別名 227
7.8 使用正則表達式查詢 228
7.8.1 查詢以特定字符或字符串開頭的記錄 229
7.8.2 查詢以特定字符或字符串結尾的記錄 230
7.8.3 用符號"."來替代字符串中的任意一個字符 230
7.8.4 使用""和" "來匹配多個字符 231
7.8.5 匹配指定字符串 231
7.8.6 匹配指定字符中的任意一個 233
7.8.7 匹配指定字符以外的字符 233
7.8.8 使用{n,}或者{n,m}來指定字符串連續出現的次數 234
7.9 綜合案例——數據表查詢操作 235
7.10 專家解惑 243
7.11 經典習題 244
第8章 插入、更新與刪除數據 245
8.1 插入數據 245
8.1.1 為表的所有字段插入數據 245
8.1.2 為表的指定字段插入數據 247
8.1.3 同時插入多條記錄 249
8.1.4 將查詢結果插入到表中 251
8.2 更新數據 252
8.3 刪除數據 254
8.4 綜合案例——記錄的插入、更新和刪除 256
8.5 專家解惑 261
8.6 經典習題 262
第9章 索 引 263
9.1 索引簡介 263
9.1.1 索引的含義和特點 263
9.1.2 索引的分類 264
9.1.3 索引的設計原則 265
9.2 創建索引 265
9.2.1 創建表的時候創建索引 266
9.2.2 在已經存在的表上創建索引 271
9.3 刪除索引 278
9.4 綜合案例——創建索引 280
9.5 專家解惑 283
9.6 經典習題 283
第10章 存儲過程和函數 285
10.1 創建存儲過程和函數 285
10.1.1 創建存儲過程 286
10.1.2 創建存儲函數 288
10.1.3 變量的使用 289
10.1.4 定義條件和處理程序 290
10.1.5 光標的使用 293
10.1.6 流程控制的使用 294
10.2 調用存儲過程和函數 299
10.2.1 調用存儲過程 299
10.2.2 調用存儲函數 300
10.3 查看存儲過程和函數 301
10.3.1 使用SHOW STATUS語句查看存儲過程和函數的狀態 301
10.3.2 使用SHOW CREATE語句查看存儲過程和函數的定義 302
10.3.3 從information_schema.Routines表中查看存儲過程和函數的信息 302
10.4 修改存儲過程和函數 304
10.5 刪除存儲過程和函數 306
10.6 綜合案例——創建存儲過程和函數 306
10.7 專家解惑 309
10.8 經典習題 310
第11章 視圖 311
11.1 視圖概述 311
11.1.1 視圖的含義 311
11.1.2 視圖的作用 312
11.2 創建視圖 313
11.2.1 創建視圖的語法形式 313
11.2.2 在單表上創建視圖 314
11.2.3 在多表上創建視圖 315
11.3 查看視圖 316
11.3.1 使用DESCRIBE語句查看視圖基本信息 316
11.3.2 使用SHOW TABLE STATUS語句查看視圖基本信息 316
11.3.3 使用SHOW CREATE VIEW語句查看視圖詳細信息 318
11.3.4 在views表中查看視圖詳細信息 318
11.4 修改視圖 320
11.4.1 使用CREATE OR REPLACE VIEW語句修改視圖 320
11.4.2 使用ALTER語句修改視圖 321
11.5 更新視圖 322
11.6 刪除視圖 324
11.7 綜合案例——視圖應用 325
11.8 專家解惑 333
11.9 經典習題 334
第12章 MySQL觸發器 335
12.1 創建觸發器 335
12.1.1 創建只有一個執行語句的觸發器 336
12.1.2 創建有多個執行語句的觸發器 337
12.2 查看觸發器 339
12.2.1 SHOW TRIGGERS語句查看觸發器信息 339
12.2.2 在triggers表中查看觸發器信息 341
12.3 觸發器的使用 342
12.4 刪除觸發器 343
12.5 綜合案例——觸發器的使用 344
12.6 專家解惑 346
12.7 經典習題 346
第13章 MySQL用戶管理 347
13.1 權 限 表 347
13.1.1&nbs
第 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書籍終于出版了!
很實用的書,如果示例更多加好了,希望內容更細。
一般都是在書店看了之后覺得好才來買的超喜歡在當當買書的尤其是便宜包裝好快遞快還比書店便宜
好書!強烈建議書里給張小票,不然我都沒東西當書簽了
很厚的一本,里面的內容很好,很適合初學者,很滿意
貨沒收到,但當當處理很快,服務態度好,這年頭服務好,處理問題快比什么都好