MySQL 8.0從入門到實戰

張文亮

  • 出版商: 清華大學
  • 出版日期: 2023-10-01
  • 售價: $534
  • 貴賓價: 9.5$507
  • 語言: 簡體中文
  • 頁數: 339
  • 裝訂: 平裝
  • ISBN: 7302645612
  • ISBN-13: 9787302645610
  • 相關分類: MySQLSQL
  • 立即出貨 (庫存 < 3)

  • MySQL 8.0從入門到實戰-preview-1
  • MySQL 8.0從入門到實戰-preview-2
  • MySQL 8.0從入門到實戰-preview-3
MySQL 8.0從入門到實戰-preview-1

買這商品的人也買了...

商品描述

MySQL數據庫是目前全球流行的數據庫之一。《MySQL 8.0從入門到實戰》從入門到實戰,系統全面、由淺入深地介紹MySQL數據庫應用的各個方面。 全書分為8個部分,共18章。第1部分(第1~3章)介紹MySQL的基礎知識,包括初識MySQL、數據庫設計和數據類型;第2部分(第4~6章)介紹MySQL的基本操作,包括SQL基礎操作、MySQL連接查詢和數據復制、MySQL基礎函數;第3部分(第7、8章)介紹MySQL高級查詢函數,包括MySQL高級函數和窗口函數;第4部分(第9、10章)介紹MySQL數據表分區,包括MySQL表分區和分區管理;第5部分(第11、12章)介紹視圖、存儲過程、字符集排序規則的說明和使用,包括MySQL視圖和存儲過程、游標和字符集排序規則;第6部分(第13~15章)介紹MySQL數據查詢優化,包括MySQL索引、InnoDB事務模型和鎖使用、InnoDB內存結構解析和優化;第7部分(第16、17章)介紹MySQL數據運維和讀寫分離架構,包括MySQL數據備份和還原、MySQL主從架構;第8部分(第18章)介紹MySQL數據操作實戰。每一部分和章節都是相對獨立的主題,讀者可以有選擇性地單獨閱讀。此外,《MySQL 8.0從入門到實戰》附有函數速查表,方便讀者在實際工作中快速查找函數。 《MySQL 8.0從入門到實戰》適合想要從事大數據開發和提升自身技能的IT從業人員、數據庫管理員、開發人員等閱讀。通過豐富的理論知識和大量的實例,本書將幫助讀者更好地應對在實際工作中遇到的與MySQL相關的問題。

目錄大綱

目    錄

 

 

 

第1部分  MySQL基礎

第1章  初識MySQL 2

1.1  MySQL是什麽 2

1.2  MySQL 8安裝和配置 3

1.2.1  安裝版本的選擇 3

1.2.2  在Windows平臺下安裝和配置MySQL 3

1.2.3  在Linux平臺下安裝和配置MySQL 10

1.2.4  在Docker平臺下安裝和配置MySQL 14

1.3  如何學習MySQL 18

1.4  本章練習 19

第2章  數據庫設計 20

2.1  關系數據庫設計理論三大範式 20

2.2  連接數據庫和基本信息查詢 24

2.2.1  連接數據庫 24

2.2.2  基本信息查詢 25

2.3  創建數據庫和表 28

2.3.1  創建數據庫 29

2.3.2  創建表 30

2.4  本章練習 31

第3章  MySQL數據類型 32

3.1  數字數據類型 32

3.2  日期和時間數據類型 36

3.3  字符串數據類型 37

3.4  JSON數據類型 43

3.5  本章練習 48

第2部分  MySQL基本操作

第4章  MySQL基礎操作 50

4.1  數據庫操作 50

4.2  數據表操作 52

4.2.1  創建數據表 52

4.2.2  數據表的修改與刪除 54

4.2.3  約束 55

4.3  數據查詢 57

4.4  數據插入 58

4.5  where(篩選) 59

4.6  and和or(與和或) 60

4.7  between(範圍查找) 61

4.8  distinct(去重關鍵字) 62

4.9  update(修改或更新) 62

4.10  delete(刪除) 64

4.11  like(模糊匹配) 65

4.12  order by(排序) 67

4.13  group by(分組) 68

4.14  with rollup(分組統計再統計) 69

4.15  having(分組篩選) 69

4.16  union和union all(組合查詢) 70

4.17  本章練習 72

第5章  MySQL連接查詢和數據復制 74

5.1  連接查詢分類 74

5.2  inner join(內連接) 75

5.3  left join(左連接) 76

5.4  right join(右連接) 77

5.5  in和not in(多關鍵字篩選) 78

5.6  exists和not exists(是否返回結果集) 79

5.7  復製表 80

5.8  臨時表 81

5.9  本章練習 82

第6章  MySQL基礎函數 83

6.1  MySQL字符串函數 83

6.1.1  character_length(s):返回字符串長度 83

6.1.2  concat(s1,s2,,sn):字符串合並 84

6.1.3  format(x,n):數字格式化 84

6.1.4  lpad(s1,len,s2):字符串填充 84

6.1.5  field(s,s1,s2,):返回字符串出現的位置 84

6.1.6  insert(s1,x,len,s2):替換字符串 85

6.1.7  lcase(s):把字符串中的所有字母轉換為小寫字母 85

6.1.8  ucase(s):把字符串中的所有字母轉換為大寫字母 85

6.1.9  strcmp(s1,s2):比較字符串大小 86

6.1.10  replace(s,s1,s2):字符串替換 86

6.1.11  position(s1 in s):獲取子字符串在字符串中出現的位置 86

6.1.12  md5(s):字符串加密 86

6.1.13  inet_aton(ip):把IP地址轉換為數字 87

6.1.14  inet_ntoa (s):把數字轉換為IP地址 87

6.2  MySQL數字函數 87

6.2.1  ceil(x):返回不小於x的最小整數 87

6.2.2  ceiling(x):返回不小於x的最小整數 88

6.2.3  floor(x):返回不大於x的最大整數 88

6.2.4  round(x):返回最接近x的整數 88

6.2.5  max(expression):求最大值 89

6.2.6  min(expression):求最小值 89

6.2.7  sum(expression):求總和 89

6.2.8  avg(expression):求平均值 90

6.2.9  count(expression):求總記錄數 90

6.3  MySQL日期函數 91

6.3.1  adddate(d,n):返回指定日期加上指定天數後的日期 91

6.3.2  addtime(t,n):返回指定時間加上指定時間後的時間 91

6.3.3  curdate():返回當前日期 92

6.3.4  datediff(d1,d2):返回兩個日期相隔的天數 92

6.3.5  dayofyear(d):返回指定日期是本年的第幾天 92

6.3.6  extract(type from d):根據對應格式返回日期 92

6.3.7  now():返回當前日期和時間 93

6.3.8  quarter(d):返回日期對應的季度數 94

6.3.9  second(t):返回指定時間中的秒數 94

6.3.10  timediff(time1, time2):計算時間差 94

6.3.11  date(t):從指定日期時間中提取日期值 95

6.3.12  hour(t):返回指定時間中的小時數 95

6.3.13  time(expression):提取日期時間參數中的時間部分 95

6.3.14  time_format(t,f):根據表達式顯示時間 95

6.3.15  year(d):返回指定日期的年份 96

第3部分  MySQL高級查詢函數

第7章  MySQL高級函數 98

7.1  cast(x as type):數據類型轉換 98

7.2  coalesce(expr1, , exprn):返回第一個非空表達式 99

7.3  if(expr,v1,v2):表達式判斷 99

7.4  ifnull(v1,v2):null替換 99

7.5  isnull(expression):判斷表達式是否為null 100

7.6  nullif(expr1, expr2):字符串相等則返回null 100

7.7  last_insert_id():返回最近生成的自增ID 101

7.8  case expression:表達式分支 101

7.9  本章練習 102

第8章  MySQL窗口函數 103

8.1  窗口函數語法和數據準備 103

8.2  排名函數 105

8.2.1  row_number():順序排名函數 105

8.2.2  rank():跳級排名函數 106

8.2.3  dense_rank():不跳級排名函數 107

8.3  分析函數 108

8.3.1  lag():前分析函數,返回前n行的值 108

8.3.2  lead():後分析函數,返回後n行的值 109

8.4  頭尾函數 109

8.4.1  first_value():頭尾函數,返回第一個值 109

8.4.2  last_value():頭尾函數,返回最後一個值 110

8.5  聚合統計函數 112

8.5.1  sum():聚合統計總和 112

8.5.2  avg():聚合統計平均值 113

8.5.3  max():聚合統計最大值 113

8.5.4  min():聚合統計最小值 114

8.5.5  count():聚合統計總條數 114

8.6  其他函數 115

8.6.1  nth_value():從結果集中的第n行獲取值 115

8.6.2  ntile():數據集分桶 117

8.7  本章練習 118

第4部分  MySQL數據表分區

第9章  MySQL表分區 120

9.1  分區介紹 120

9.2  分區類型 121

9.3  範圍分區 121

9.4  列表分區 124

9.5  列分區 127

9.5.1  範圍列分區 127

9.5.2  列表列分區 132

9.6  哈希分區 134

9.7  鍵分區 137

9.8  子分區 138

9.9  MySQL分區對null的處理 140

9.10  本章練習 145

第10章  MySQL分區管理 146

10.1  範圍分區和列表分區的管理 146

10.1.1  添加和刪除分區 146

10.1.2  拆分合並分區 149

10.2  哈希分區和鍵分區的管理 149

10.3  分區管理和維護操作 150

10.4  分區的限制 152

10.5  分區鍵與主鍵、唯一鍵的關系 153

10.6  本章練習 156

第5部分  視圖、存儲過程、字符集和排序規則的說明和使用

第11章  MySQL視圖和存儲過程 158

11.1  視圖 158

11.2  存儲過程 161

11.2.1  存儲過程的創建和調用 162

11.2.2  帶參數的存儲過程 163

11.2.3  變量 166

11.2.4  註釋 167

11.2.5  存儲過程的修改和刪除 168

11.2.6  存儲過程的控制語句 168

11.3  本章練習 171

第12章  MySQL游標、字符集和排序規則 172

12.1  游標 172

12.2  字符集和排序規則 175

12.2.1  MySQL中的字符集和排序規則 175

12.2.2  列字符集和排序規則 177

12.2.3  使用collate查詢排序規則 178

12.3  本章練習 178

第6部分  MySQL數據查詢優化

第13章  MySQL索引 180

13.1  索引 180

13.2  創建索引的指導原則 183

13.3  B-Tree索引和哈希索引的比較 184

13.4  SQL執行計劃分析 185

13.5  MySQL的索引檢索原理 200

13.5.1  主鍵索引 200

13.5.2  普通索引 204

13.5.3  復合索引 206

13.6  索引的使用技巧與SQL優化實戰 208

13.7  本章練習 213

第14章  InnoDB存儲引擎事務模型和鎖的使用 214

14.1  InnoDB存儲引擎實踐 216

14.2  InnoDB和ACID模型 217

14.2.1  MySQL事務處理的兩種方法 218

14.2.2  InnoDB MVCC 219

14.3  鎖機制 220

14.3.1  表級鎖 221

14.3.2  行級鎖 221

14.3.3  共享鎖 222

14.3.4  排他鎖 223

14.3.5  意向鎖 224

14.3.6  樂觀鎖 225

14.3.7  悲觀鎖 226

14.3.8  間隙鎖 226

14.3.9  記錄鎖 228

14.3.10  臨鍵鎖 228

14.3.11  死鎖 229

14.4  事務隔離級別 229

14.5  本章練習 232

第15章  InnoDB內存結構解析和優化 233

15.1  InnoDB內存結構解析和優化實戰 233

15.1.1  緩沖池原理和優化 234

15.1.2  變更緩沖區原理與優化 245

15.1.3  自適應哈希索引原理與配置 247

15.1.4  日誌緩沖區 248

15.2  InnoDB表實戰調優 248

15.2.1  優化InnoDB表的存儲 248

15.2.2  InnoDB事務處理優化 250

15.2.3  InnoDB只讀事務優化 250

15.2.4  優化InnoDB重做日誌 251

15.2.5  InnoDB磁盤I/O優化 255

15.2.6  配置InnoDB線程並發數量 256

15.2.7  配置InnoDB的I/O讀寫後台線程數量 257

15.2.8  InnoDB的並行讀線程數量 257

15.2.9  InnoDB的I/O容量 258

15.3  本章練習 258

第7部分  MySQL數據運維和讀寫分離架構

第16章  MySQL數據的備份與還原 260

16.1  基準測試 260

16.1.1  Sysbench介紹 261

16.1.2  Sysbench測試實操 262

16.2  備份 266

16.3  還原 267

16.3.1  利用source命令導入數據庫 267

16.3.2  利用load data infile導入數據 268

16.3.3  利用mysqlimport導入數據 268

16.4  本章練習 268

第17章  MySQL主從架構 269

17.1  讀寫分離 269

17.2  MySQL主從復制 270

17.3  MySQL主從復制架構的搭建 271

17.3.1  配置主節點 271

17.3.2  配置從節點 272

17.3.3  主從復制 273

17.4  本章練習 274

第8部分  MySQL操作實戰

第18章  MySQL數據操作實戰 276

18.1  數據庫和數據表的創建與查看 276

18.2  新增、修改、刪除表數據 280

18.3  基礎查詢和where子句查詢 281

18.4  like模糊查詢 286

18.5  分組查詢、聚合函數、排序查詢 287

18.6  關聯查詢 291

18.7  子查詢、多表查詢 293

18.8  本章練習 296

附錄A  函數速查表 299

A.1  MySQL字符串函數 299

A.1.1  ASCII(s):返回字符串的ASCII碼 299

A.1.2  char_length(s):返回字符串長度 300

A.1.3  character_length(s):返回字符串長度 300

A.1.4  concat(s1,s2,,sn):字符串合並 300

A.1.5  concat_ws(x, s1,s2,,sn):字符串合並 300

A.1.6  field(s,s1,s2,):返回字符串出現的位置 301

A.1.7  find_in_set(s1,s2):返回字符串的匹配位置 301

A.1.8  format(x,n):數字格式化 301

A.1.9  insert(s1,x,len,s2):替換字符串 302

A.1.10  locate(s1,s):獲取字符串出現的位置 302

A.1.11  lcase(s):把字符串中的所有字母轉換為小寫字母 302

A.1.12  left(s,n):返回字符串的前n個字符 302

A.1.13  lower(s):把字符串中的所有字母轉換為小寫字母 303

A.1.14  lpad(s1,len,s2):字符串填充 303

A.1.15  ltrim(s):去掉字符串開始處的空格 303

A.1.16  mid(s,n,len):從字符串的指定位置截取子字符串 303

A.1.17  replace(s,s1,s2):字符串替換 304

A.1.18  reverse(s):字符串反轉 304

A.1.19  right(s,n):返回字符串後n個字符 304

A.1.20  rpad(s1,len,s2):在字符串中填充相應字符串 305

A.1.21  position(s1 in s):獲取子字符串在字符串中出現的位置 305

A.1.22  repeat(s,n):字符串重復拼接 305

A.1.23  substring_index(s, s2, number):返回字符串中第n個出現的子字符串 305

A.1.24  trim(s):去掉字符串開始和結尾處的空格 306

A.1.25  ucase(s):把字符串中的所有字母轉換為大寫字母 306

A.1.26  rtrim(s):去掉字符串結尾處的空格 306

A.1.27  strcmp(s1,s2):比較字符串的大小 307

A.1.28  substr(s, start, length):從字符串中截取子字符串 307

A.1.29  substring(s, start, length):從字符串中截取子字符串 307

A.1.30  md5(s):字符串加密 308

A.1.31  inet_aton (ip):把IP地址轉換為數字 308

A.1.32  inet_ntoa(s):把數字轉換為IP地址 308

 

A.2  MySQL數字函數 309

A.2.1  abs(x):求絕對值 309

A.2.2  sign(x):返回數字符號 309

A.2.3  acos(x):求反餘弦值 309

A.2.4  asin(x):求反正弦值 310

A.2.5  atan (x):求反正切值 310

A.2.6  sin(x):求正弦值 310

A.2.7  cos(x):求餘弦值 310

A.2.8  cot(x):求餘切值 311

A.2.9  tan(x):求正切值 311

A.2.10  degrees(x):將弧度轉換為角度 311

A.2.11  radians(x):將角度轉換為弧度 312

A.2.12  exp(x):返回e的x次方 312

A.2.13  ceil(x):返回不小於x的最小整數 312

A.2.14  ceiling(x):返回不小於x的最小整數 312

A.2.15  floor(x):返回不大於x的最大整數 313

A.2.16  round(x):返回最接近x的整數 313

A.2.17  greatest(expr1,expr2, ):返回列表中的最大值 313

A.2.18  least(expr1, expr2, expr3, ):返回列表中的最小值 314

A.2.19  ln(x):求自然對數 314

A.2.20  log(x)或log(base, x):求對數 314

A.2.21  log10(x):求以10為底的對數 315

A.2.22  log2(x):求以2為底的對數 315

A.2.23  max(expression):求最大值 315

A.2.24  min(expression):求最小值 316

A.2.25  sum(expression):求總和 316

A.2.26  avg(expression):求平均值 317

A.2.27  count(expression):求總記錄數 317

A.2.28  mod(x,y):求餘數 317

A.2.29  pow(x,y):求x的y次方 318

A.2.30  sqrt(x):求平方根 318

A.2.31  rand():求隨機數 318

A.2.32  truncate(x,y):返回保留到小數點後n位的值 319

A.3  MySQL日期函數 319

A.3.1  adddate(d,n):返回指定日期加上指定天數後的日期 319

A.3.2  addtime(t,n):返回指定時間加上指定時間後的時間 319

A.3.3  curdate():返回當前日期 320

A.3.4  current_date():返回當前日期 320

A.3.5  current_time():返回當前時間 320

A.3.6  current_timestamp():返回當前日期和時間 320

A.3.7  curtime():返回當前時間 321

A.3.8  date(t):從指定日期時間中提取日期值 321

A.3.9  datediff(d1,d2):返回兩個日期相隔的天數 321

A.3.10  date_add(d, interval expr type):給指定日期加上一個時間段後的日期 322

A.3.11  date_format(d,f):根據表達式顯示日期 322

A.3.12  date_sub(date, interval expr type):從當前日期減去指定的時間間隔 322

A.3.13  day(d):返回日期值中的日值 323

A.3.14  dayname(d):返回指定日期是星期幾 323

A.3.15  dayofmonth(d):返回指定日期是本月的第幾天 323

A.3.16  dayofweek(d):返回指定日期是所在星期的第幾天 323

A.3.17  dayofyear(d):返回指定日期是本年的第幾天 324

A.3.18  extract (type from d):根據對應格式返回日期 324

A.3.19  from_days(n):返回元年加n天的日期 325

A.3.20  hour(t):返回指定時間中的小時數 325

A.3.21  last_day(d):返回給定日期所在月份的最後一天 326

A.3.22  localtime():返回當前日期和時間 326

A.3.23  localtimestamp():返回當前日期和時間 326

A.3.24  makedate(year, day-of-year):時間組合天數 326

A.3.25  maketime(hour, minute, second):時間組合 327

A.3.26  microsecond(date):返回時間參數中的微秒數 327

A.3.27  minute(t):返回指定時間中的分鐘數 327

A.3.28  monthname(d):返回日期中的月份名稱 328

A.3.29  month(d):返回日期中的月份值 328

A.3.30  now():返回當前日期和時間 328

A.3.31  period_add(period, number):日期加月份數 328

A.3.32  period_diff(period1, period2):返回兩個時間之間的月份差 329

A.3.33  quarter(d):返回日期對應的季度數 329

A.3.34  second(t):返回指定時間中的秒數 329

A.3.35  sec_to_time(s):秒數轉換為時間 329

A.3.36  str_to_date(string, format_mask):把字符串轉換為日期 330

A.3.37  subdate(d,n):從指定日期減去指定天數後的日期 330

A.3.38  subtime(t,n):從指定時間減去指定秒數後的時間 330

A.3.39  sysdate():返回當前日期和時間 331

A.3.40  time(expression):提取日期時間參數中的時間部分 331

A.3.41  time_format(t,f):根據表達式顯示時間 331

A.3.42  time_to_sec(t):把時間轉換為秒數 331

A.3.43  timediff(time1, time2):計算時間差 332

A.3.44  timestamp(expression, interval):指定時間加上時間間隔後的時間 332

A.3.45  to_days(d):計算元年到當前日期的天數 332

A.3.46  week(d):返回指定日期是本年的第幾周 333

A.3.47  weekday(d):返回指定日期是星期幾 333

A.3.48  year(d):返回指定日期的年份 333

A.4  MySQL高級函數 333

A.4.1  bin(x):返回字符串的二進制編碼 333

A.4.2  binary(s):將字符串轉換為二進制數 334

A.4.3  case expression:表達式分支 334

A.4.4  cast(x as type):數據類型轉換 335

A.4.5  coalesce(expr1,,exprn):返回第一個非空表達式 335

A.4.6  connection_id():返回唯一連接ID 335

A.4.7  conv(x,f1,f2):數據進制轉換 335

A.4.8  convert(s using cs):求字符串的字符集 336

A.4.9  current_user():返回當前的用戶名 336

A.4.10  database():返回當前的數據庫名 336

A.4.11  if(expr,v1,v2):表達式判斷 337

A.4.12  ifnull(v1,v2):null替換 337

A.4.13  isnull(expression):判斷表達式是否為null 337

A.4.14  nullif(expr1, expr2):字符串相等則返回null 338

A.4.15  last_insert_id():返回最近生成的自增ID 338

A.4.16  session_user():返回當前會話的用戶名 339

A.4.17  version():返回數據庫的版本號 339