- 01-MySQL教程簡介
- 02-為什么使用數據庫及數據庫常用概念
- 03-常見的DBMS的對比
- 04-RDBMS和非RDBMS的對比
- 05-ER模型與表記錄的4種關系
- 06-MySQL8.0的卸載
- 07-MySQL8.0與5.7版本的下載、安裝與配置
- 08-MySQL安裝常見問題_服務啟動與用戶登錄
- 09-MySQL的使用演示_MySQL5.7字符集的設置
- 10-Navicat_SQLyog_dbeaver等工具的使用
- 11-MySQL目錄結構及前2章課后練習
- 12-SQL概述與SQL分類
- 13-SQL使用規范與數據的導入
- 14-最基本的SELECT...FROM結構
- 15-列的別名_去重_NULL_DESC等操作
- 16-使用WHERE過濾數據
- 17-第3章基本SELECT查詢課后練習
- 18-算術運算符的使用
- 19-比較運算符的使用
- 20-邏輯運算符與位運算符的使用
- 21-第4章運算符課后練習
- 22-ORDER BY實現排序操作
- 23-LIMIT實現分頁操作
- 24-第5章排序與分頁課后練習
- 25-為什么需要多表的查詢
- 26-笛卡爾積的錯誤與正確的多表查詢
- 27-等值連接vs非等值連接、自連接vs非自連接
- 28-SQL92與99語法如何實現內連接和外連接
- 29-使用SQL99實現7種JOIN操作
- 30-NATURAL JOIN與USING的使用
- 31-第6章多表查詢課后練習
- 32-函數的分類
- 33-數值類型的函數講解
- 34-字符串類型的函數講解
- 35-日期時間類型的函數講解
- 36-流程控制函數講解
- 37-加密解密_MySQL信息函數等講解
- 38-第7章單行函數課后練習
- 39-5大常用的聚合函數
- 40-GROUP BY的使用
- 41-HAVING的使用與SQL語句執行過程
- 42-第8章聚合函數課后練習
- 43-子查詢舉例與子查詢的分類
- 44-單行子查詢案例分析
- 45-多行子查詢案例分析
- 46-相關子查詢案例分析
- 47-第9章子查詢課后練習1
- 48-第9章子查詢課后練習2
- 49-數據庫的創建、修改與刪除
- 50-常見的數據類型_創建表的兩種方式
- 51-修改表_重命名表_刪除表_清空表
- 52-DCL中COMMIT與ROLLBACK的使用
- 53-阿里MySQL命名規范及MySQL8DDL的原子化
- 54-第10章創建管理表課后練習
- 55-DML之添加數據
- 56-DML之更新刪除操作_MySQL8新特性之計算列
- 57-DDL和DML的綜合案例
- 58-第11章增刪改課后練習
- 59-MySQL數據類型概述_字符集設置
- 60-整型數據類型講解
- 61-浮點數、定點數與位類型講解
- 62-日期時間類型講解
- 63-文本字符串類型(含ENUM、SET)講解
- 64-二進制類型與JSON類型講解
- 65-小結及類型使用建議
- 66-數據完整性與約束的分類
- 67-非空約束的使用
- 68-唯一性約束的使用
- 69-主鍵約束的使用
- 70-AUTO_INCREMENT
- 71-外鍵約束的使用
- 72-檢查約束與默認值約束
- 73-第13章約束課后練習
- 74-數據庫對象與視圖的理解
- 75-視圖的創建與查看
- 76-更新視圖數據與視圖的刪除
- 77-第14章視圖課后練習
- 78-存儲過程使用說明
- 79-存儲過程的創建與調用
- 80-存儲函數的創建與調用
- 81-存儲過程與函數的查看修改和刪除
- 82-第15章存儲過程函數課后練習
- 83-GLOBAL與SESSION系統變量的使用
- 84-會話用戶變量與局部變量的使用
- 85-程序出錯的處理機制
- 86-分支結構IF的使用
- 87-分支結構CASE的使用
- 88-LOOP_WHILE_REPEAT三種循環結構
- 89-LEAVE和ITERATE的使用
- 90-游標的使用
- 91-第16章課后練習
- 92-創建觸發器
- 93-查看刪除觸發器_觸發器課后練習
- 94-MySQL8.0新特性_窗口函數的使用
- 95-公用表表達式_課后練習_最后寄語
- 96-MySQL高級特性篇章節概覽
- 97-CentOS環境的準備
- 98-MySQL的卸載
- 99-Linux下安裝MySQL8.0與5.7版本
- 100-SQLyog實現MySQL8.0和5.7的遠程連接
- 101-字符集的修改與底層原理說明
- 102-比較規則_請求到響應過程中的編碼與解碼過程
- 103-SQL大小寫規范與sql_mode的設置
- 104-MySQL目錄結構與表在文件系統中的表示
- 105-用戶的創建_修改_刪除
- 106-用戶密碼的設置和管理
- 107-權限管理與訪問控制
- 108-角色的使用
- 109-配置文件、系統變量與MySQL邏輯架構
- 110-SQL執行流程
- 111-MySQL8.0和5.7中SQL執行流程的演示
- 112-Oracle中SQL執行流程_緩沖池的使用
- 113-設置表的存儲引擎、InnoDB與MyISAM的對比
- 114-Archive、CSV、Memory等存儲引擎的使用
- 115-為什么使用索引及索引的優缺點
- 116-一個簡單的索引設計方案
- 117-索引的迭代設計方案
- 118-聚簇索引、二級索引與聯合索引的概念
- 119-InnoDB中B+樹注意事項_MyISAM的索引方案
- 120-Hash索引、AVL樹、B樹與B+樹對比
- 121-InnoDB數據存儲結構概述
- 122-頁結構之文件頭部與文件尾部
- 123-頁結構之最小最大記錄_行格式之記錄頭信息
- 124-頁結構之頁目錄與頁頭
- 125-設置行格式與ibd文件剖析Compact行格式
- 126-行溢出與Dynamic、Compressed、Redundant行格式
- 127-區、段、碎片區與表空間結構
- 128-索引的分類
- 129-表中添加索引的三種方式
- 130-刪除索引與索引新特性:降序索引、隱藏索引
- 131-適合創建索引的11種情況1
- 132-適合創建索引的11種情況2
- 133-不適合創建索引的7種情況
- 134-數據庫優化步驟_查看系統性能參數
- 135-慢查詢日志分析、SHOW PROFILE查看SQL執行成本
- 136-EXPLAIN的概述與table、id字段剖析
- 137-EXPLAIN中select_type、partitions、type、possible_keys、key、key_len剖析
- 138-EXPLAIN中ref、rows、filtered、extra剖析
- 139-EXPLAIN的4種格式與查看優化器重寫SQL
- 140-trace分析優化器執行計劃與Sys schema視圖的使用
- 141-數據準備與索引失效的11種情況1
- 142-索引失效的11種情況2
- 143-外連接與內連接的查詢優化
- 144-JOIN語句的底層原理
- 145-子查詢優化與排序優化
- 146-GROUP BY優化、分頁查詢優化
- 147-覆蓋索引的使用
- 148-索引條件下推(ICP)
- 149-其他查詢優化策略
- 150-淘寶數據庫的主鍵如何設計
- 151-范式概述與第一范式
- 152-第二范式與第三范式
- 153-反范式化的應用
- 154-巴斯范式、第四范式、第五范式和域鍵范式
- 155-范式的實戰案例
- 156-ER建模與轉換數據表的過程
- 157-數據庫的設計原則和日常SQL編寫規范
- 158-PowerDesigner創建概念、物理數據模型
- 159-數據庫調優整體步驟、優化MySQL服務器硬件和參數
- 160-數據庫結構優化、大表優化、其它3個策略
- 161-事務的ACID特性與事務的狀態
- 162-顯式事務與隱式事務
- 163-事務的使用舉例
- 164-數據并發問題與4種隔離級別
- 165-MySQL隔離級別的查看和設置
- 166-讀未提交隔離性下的演示
- 167-讀已提交和可重復讀的隔離性下的演示
- 168-幻讀的演示與解決方案
- 169-Redo日志和Undo日志的理解、為什么需要Redo日志
- 170-Redo日志的刷盤策略與過程剖析
- 171-寫入Redo Log Buffer和Redo Log File的寫入策略
- 172-Undo日志的概述與寫入過程
- 173-鎖的概述_讀寫的并發問題
- 174-數據操作類型的角度理解S鎖與X鎖
- 175-表鎖之S鎖、X鎖、意向鎖
- 176-表鎖之自增鎖、元數據鎖
- 177-行鎖之記錄鎖、間隙鎖
- 178-行鎖之臨鍵鎖與插入意向鎖
- 179-頁鎖的理解、樂觀鎖與悲觀鎖的使用
- 180-加鎖方式劃分:隱式鎖與顯式鎖
- 181-全局鎖與死鎖的理解
- 182-鎖的內存結構與監控策略
- 183-MVCC解決讀寫問題
- 184-MVCC三劍客:隱藏字段、UndoLog版本鏈、ReadView規則
- 185-MVCC在讀已提交和可重復讀隔離級別下的操作流程
- 186-MVCC在可重復讀下解決幻讀的流程
- 187-六大日志文件的概述
- 188-通用查詢日志、錯誤日志
- 189-binlog日志的參數設置與實現數據恢復演示
- 190-binlog的刪除、binlog的寫入機制與兩階段提交
- 191-中繼日志、主從復制的步驟與原理剖析
- 192-一主一從架構搭建與主從同步的實現
- 193-binlog的format設置說明
- 194-數據同步一致性問題解決
- 195-數據備份概述與mysqldump實現邏輯備份數據
- 196-演示mysql實現邏輯恢復數據
- 197-物理備份和物理恢復的演示、表數據的導出與導入
- 198-數據庫遷移與如何刪庫不跑路
- 199-最后寄語
一、數據庫基礎(Database)
1.1 認識數據庫
1.1.1 基本概念
DB:能將大量數據保存起來,通過計算機加工而成的可以進行高效訪問的數據集合稱為數據庫(database,db)
DBMS:用來管理數據庫的計算機系統稱為數據庫管理系統(database management system,dbms)。
RDBMS:關系型數據庫通過關系數據庫管理系統(relational database management system,rdbms)進行管理。
我們常常會用“數據庫”簡單代稱上面的三個概念,但是要注意使用場景。
1.1.2 數據庫作用
B站等網站、微信等APP背后都是一個巨大的數據庫系統,我們點擊或者輸入文字都會存儲在數據庫中或者從數據庫中取出對應數據。
數據庫管理系統的構成:
a.能讓我們使用表、列和索引實現一個數據庫(如何存入數據)
b.解析和執行一個SQL查詢,并將結果返回給客戶端(如何讀出數據)
c.提供管理接口(如何管理數據I/O過程)
數據庫的構成:
a.(子)數據庫:是表的集合,帶有相關的元數據。
b.表:)一個表是由列和行組成的數據矩陣。數據庫基礎對象。
c.列(字段):一個列(數據元素)包含同一類型的數據。
d.行(記錄):是一組相關的數據。
e.約束:用于確保數據庫滿足業務規則。
1.1.3 數據庫分類
a.關系型數據庫:
MySQL,oracle,SQLserver,db2,access等,傳統數據庫一般都是使用這類關系型數據庫。所有的數據存儲在不同表中,使用主鍵或外鍵建立表間的關系。
b.非關系型數據庫(NoSQL):
文檔型數據庫(mongodb),鍵值(Key-Value)存儲數據庫(redis),列存儲數據庫(Cassandra),圖形(Graph)數據庫等,為解決大規模數據集合、多重數據種類、高并發的新需求。
1.1.4 數據庫管理系統(DBMS)
a.數據庫文件
按照一定規則,存放在硬盤上的數據文件集合。所以,MySQL 里的數據庫都能在計算機硬盤內某個文件夾里找到對應的數據文件。
b.數據庫管理系統
用來管理數據庫文件一套程序(比如關系型/非關系型數據庫)。
c.數據庫實例
指計算機內存中處于運行狀態的數據庫程序,以及為這些程序分配的一些內存空間。
實例是位于內存中,只在數據庫處運行狀態時才存在。簡單點來講,數據庫實例就是把數據庫加載到內存里面。
d.數據庫應用
建立在數據庫上,對其功能進行擴充的程序。比如支付寶和微信都屬于數據庫應用程序,它們的后臺都需要數據庫來存儲數據。
1.2 MySQL
1.2.1 MySQL官方下載地址
MySQL :: Download MySQL Community Server
1.2.2 MySQL的種類
MySQL community server 社區版本,開源免費,但不提供官方技術支持,通常情況下都是選擇社區版。
MySQL enterprise edition 企業版本,需付費,可以試用30天。
MySQL cluster集群版,開源免費?蓪讉MySQLserver封裝成一個server。
MySQL clustercge高級集群版,需付費。
對MySQL的二次開發:percona(淘寶在用,用作定制化開發);mariadb(銀行經常它用來取代MySQL)
1.2.3 MySQL版本
MySQL 的命名是根據發行版本不同由三個數字和一個后綴組成,如:MySQL-5.7.2。發行版名稱中的數字使用如下規則解析:
5表示主版本(major version),同時也定義了文件格式(file format)。所有主版本相同的版本有著同樣的文件格式,不用主版本的差別會很大;
7表示發行版本(release level),主版本和發行版本一同構成該發行版序列號(series number);
5表示該發行版系列的小版本(version),該數字隨著發行版本的每次新發布遞增,通常我們會選擇最新的次版本。
1.3如何訪問數據庫
要訪問數據庫服務器,必須通過客戶端.客戶端可以分為兩大類:命令行(自帶),可視化工具。
1.3.1 通過命令行客戶端訪問數據庫服務器
第一步:配置環境變量path
第二步:打開命令窗口
在“開始”輸入“cmd”+回車,也可以按鍵盤上的“微軟logo”+“R”
第三步:啟動MySQL客戶端程序
如果數據庫在當前電腦上,可以直接輸入指定賬戶和密碼,連接服務。如下圖輸入:
mysql -u -root -p
如果數據庫在服務器上,不在你電腦上。比如你們公司數據庫的ip 地址是:192.168.1.122。上面輸入命令行的時候需要改成輸入:
mysql -h 192.168.1.122-u -root -p
第四步:退出命令行模式
執行退出語句“exit”
1.3.2 內置的命令行模式訪問
也可以不在cmd進入命令行模式,通過MySQL內置的命令行模式:
1.3.3 圖形化界面工具訪問
常用的MySQL可視化工具:
MySQL workbench:官方自帶免費工具
navicat:收費版本,界面和功能更加強大,還可以支持SQLserver
MySQL workbench的使用
添加連接數據庫名字和IP地址,默認的地址是本機數據庫地址。
1.4MySQL服務啟動與關閉命令
從命令行或者圖形化界面客戶端連接數據庫服務器時,一般都會自動啟動MySQL服務實例,但是有時候會出現意外,服務沒有啟動,這時候需要手動啟動。
方法一:命令行模式
在開始菜單中輸入cmd,然后右擊“命令提示符”,用管理員權限打開,否則有可能無法訪問。
使用啟動或者關閉MySQL默認服務實例:
使用net start/stop mysql57啟動或者關閉MySQL默認服務實例:
方法二:窗口模式
進入控制面板-管理工具-服務-MySQL57,右鍵啟動或關閉MySQL默認服務實例。
右擊 MySQL57這一行,可以啟動和關閉 MySQL57。
二、MySQL簡介
2.1 SQL和MySQL
SQL:結構化查詢語言(structured query language),是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。
MySQL是一個關系型數據庫管理系統,是一種開源的數據庫軟件,簡單一點的理解就是 MySQL 用來存儲數據,而 SQL 是用來管理 MySQL 的一種語言。
SQL是一種語言,MySQL 是一種數據庫軟件。
SQL的標準并不強制每種RDMS都必須使用。
2.2 SQL的基本書寫規則
SQL 語句以分號“;”結尾。
SQL語句不區分大小寫,但是插入到表中的數據是區分大小寫的。
字符串和日期常數需要使用單引號“ ' ”括起來,數字直接寫即可。
單行注釋可以用“-- ”
多行注釋可以用快捷鍵:ctrl+/(小鍵盤的”/”)
2.3 數據庫基本操作
SQL用關鍵字、表名、列名等組合而成的一條語句(SQL語句)來描述操作的內容。關鍵字是指那些含義或使用方法已事先定義好的英語單詞。
2.4 SQL語句分類
根據對RDBMS 賦予的指令種類的不同,SQL語句可以分為以下三類。
DDL
DDL(data definition language,數據定義語言)用來創建或者刪除存儲數據用的數據庫以及數據庫中的表等對象。DDL包含以下幾種指令。
create:創建數據庫和表等對象
alter:修改數據庫和表等對象的結構
drop:刪除數據庫和表等對象
DML
DML(data manipulation language,數據操縱語言)用來查詢或者變更表中的記錄。DML 包含以下幾種指令。
insert:向表中插入新數據
update:更新表中的數據
delete:刪除表中的數據
DCL
DCL(data control language,數據控制語言)用來確認或者取消對數據庫中的數據進行的變更。除此之外,還可以對 RDBMS的用戶是否有權限操作數據庫中的對象(數據庫表等)進行設定。DCL 包含以下幾種指令。
commit:確認對數據庫中的數據進行的變更
rollback:取消對數據庫中的數據進行的變更
grant:賦予用戶操作權限
revoke:取消用戶的操作權限
DQL
DQL(data query language)數據查詢語言(select),實現對數據庫中數據的讀操作。是數據分析重點學習的重點。
TCL
TCL(transaction control language) 事務控制語言(save commit roll back)用于事務的操作。
2.5 創建數據庫
方法一:使用SQL代碼
create database school;
use school;
方法二:在數據庫區域點擊建庫
2.6 顯示和使用數據庫
Show databases;
use school;
MySQL自身會有一些系統庫,一般不要刪除或變動。
sys庫:MySQL5.7增加了sys系統數據庫,通過這個庫可以快速的了解系統的元數據信息。
information_schema庫:提供了訪問數據庫元數據的方式。
mysql庫:主要負責存儲數據庫的用戶、權限設置、關鍵字等MySQL自己需要使用的控制和管理信息。
performance_schema庫:主要用于收集數據庫服務器性能參數。
2.7 刪除數據庫
方法一:SQL代碼
drop database school;
方法二:在workbench上刪除
2.8 創建表
方法一:SQL代碼
在建一個新表之前就指定數據庫,這里指定數據庫school。
use school;
creat table+表名;
方法二:在workbench上建表
2.9 數據庫引擎
2.9.1 什么是數據庫引擎
相當于數據庫實例的發動機。數據庫引擎是用于存儲、處理和保護數據的核心服務。利用數據庫引擎可控制訪問權限并快速處理事務,從而滿足企業內大多數需要處理大量數據的應用程序的要求。使用數據庫引擎創建用于聯機事務處理或聯機分析處理數據的關系數據庫。這包括創建用于存儲數據的表和用于查看、管理和保護數據安全的數據庫對象(如索引、視圖和存儲過程)。
不同的數據庫引擎有不同的特點,可以滿足各種不同的業務場景。MySQL。
2.9.2 常見的數據庫引擎
包括innodb、myisam、memery、csv、blackhole、archive、federated、performance_schema。其中innodb和myisam占到95%以上。
innodb是一個強大的事務型存儲引擎,這種存儲引擎已經被很多互聯網公司使用,為用戶操作非常大的數據存儲提供了一個強大的解決方案。
innodb還引入了行級鎖定和外鍵約束,在以下場合下,使用innodb 是最理想的選擇:
更新密集的表:innodb 存儲引擎特別適合處理多重并發的更新請求。
事務:innodb 存儲引擎是支持事務的標準 MySQL 存儲引擎。
外鍵約束:MySQL支持外鍵的存儲引擎只有innodb