什么是MySQL
MySQL是一個開源的關系型數據庫管理系統,由瑞典MySQL AB公司開發(目前屬于Oracle公司),被廣泛地應用在大中小型網站中
MySQL是一個小型的開源的關系型數據庫管理系統,與其他大型數據庫管理系統例如:Oracle、DB2、SQL Server等相比,MySQL規模小、功能有限,但是它體積小、速度快、成本低,并且提供的功能對稍微復雜的應用已經夠用,這使得MySQL成為世界上最受歡迎的開放源代碼數據庫
MySQL版本
針對不同的用戶,MySQL分為兩個不同的版本:
- MySQL社區版:該版本完全免費,但是官方不提供技術支持
- MySQL企業版:為企業提供數據庫應用,支持ACID事務處理,提供完整的提交、回滾、崩潰恢復和行政鎖定功能,需要付費使用,官方提供技術支持
另外由于MySQL是開源的,企業也可以根據項目需要定制自己的MySQL
MySQL安裝、配置與連接
MySQL不同平臺安裝參考:MySQL 教程
另一種安裝MySQL的方式是安裝小皮面板,在小皮面板內部安裝、連接、管理MySQL
?
可以在軟件管理部分按照、卸載不同版本的MySQL
?
可以在數據庫部分設置數據庫用戶名和密碼
?
可在首頁相應數據庫配置數據庫信息,比如數據庫端口號
?
配置MySQL環境變量:
- 找到MySQL安裝路徑:從小皮面板的下載文件夾中,確認MySQL的具體安裝目錄,比如:C:\phpstudy_pro\Extensions\MySQL8.0.26
- 打開環境變量設置:在Windows系統中,通過控制面板 - 系統 - 高級系統設置,點擊環境變量按鈕,或者直接在此電腦上右鍵,選擇屬性,然后在彈出的窗口中點擊 高級系統設置,再點擊環境變量
- 配置 Path 變量:在系統變量中找到Path變量并雙擊打開,點擊新建,將找到的MySQL 安裝路徑下的bin目錄路徑添加進去,例如C:\phpstudy_pro\Extensions\MySQL8.0.26\bin,點擊確定保存設置,關閉所有環境變量設置窗口
- 驗證配置:打開命令提示符(CMD),輸入mysql -V(注意 V 大寫),如果能顯示MySQL的版本信息,說明環境變量配置成功
選擇MySQL版本后點擊啟動按鈕,即可啟動MySQL服務
?
如果配置了MySQL環境變量就可以在命令行窗口中輸入以下指令訪問MySQL
mysql -u用戶名 -p密碼
?
在MySQL輸入符后輸入exit或quit即可退出MySQL
MySQL工作原理
- 客戶端與服務端連接:操作MySQL數據庫時,首先需要通過客戶端工具(如命令行客戶端、Navicat、SQLyog等圖形化界面工具 ,或編程接口如JDBC、ODBC等)連接到MySQL服務端,連接過程一般包含以下步驟:
- 建立網絡連接:客戶端與MySQL服務端(進程名為mysqld)基于TCP/IP協議建立網絡連接
- 身份驗證:服務端對客戶端發送過來的用戶名和密碼進行驗證,只有驗證通過,客戶端才能獲得訪問數據庫的權限,此外,服務端還會根據用戶權限表,判斷該用戶對特定數據庫、表等對象擁有哪些操作權限(如查詢、插入、修改、刪除等)
- 查詢處理:客戶端成功連接并發送SQL查詢語句后,MySQL服務端會按以下流程處理:
- 查詢解析:服務端的查詢解析器將SQL語句解析成內部的解析樹結構,檢查SQL語句的語法是否正確,比如關鍵字拼寫是否正確、括號是否匹配等,如果語法有誤,會返回錯誤信息給客戶端
- 查詢優化:查詢優化器會根據解析樹生成多種可能的執行計劃, 并基于統計信息(如索引的使用情況、表的行數等)評估每個執行計劃的成本,選擇成本最低(效率最高)的執行計劃,例如,對于SELECT * FROM users WHERE age > 18;這樣的查詢,優化器會判斷是否使用age字段上的索引能更快獲取數據
- 查詢執行:執行器根據優化器生成的執行計劃,調用存儲引擎提供的接口來訪問和操作數據,比如,執行器調用InnoDB存儲引擎的接口去讀取符合條件的數據行
- 存儲引擎工作機制:MySQL支持插件式的存儲引擎架構,不同的存儲引擎決定了數據的存儲方式、索引結構以及事務處理等特性,常見存儲引擎有InnoDB、MyISAM等 :
- InnoDB:是MySQL默認的存儲引擎,支持事務,遵循ACID特性。它使用聚簇索引(基于主鍵構建),數據和索引緊密結合存儲,適合處理高并發的讀寫操作,尤其是涉及事務的場景,如電商的訂單處理、銀行的轉賬業務等,此外,InnoDB有緩沖池機制,會把經常訪問的數據和索引緩存到內存中,以減少磁盤I/O操作 ,提升查詢性能
- MyISAM:不支持事務,適合以讀操作和插入操作為主的場景,比如日志記錄。它的表存儲結構分為數據文件和索引文件,索引采用非聚簇索引,MyISAM表支持表級鎖,在寫入操作時會鎖定整張表,這在高并發寫入場景下性能較差
- 數據存儲與持久化:數據最終會存儲在磁盤上,MySQL通過操作系統文件系統管理數據文件
- 事務處理:如果SQL語句涉及事務(如多個插入、更新、刪除操作需要作為一個整體成功或失敗),MySQL會進行如下處理:
- 事務開啟:客戶端發送START TRANSACTION或BEGIN語句,開啟事務
- 操作執行:在事務中執行的SQL語句,會記錄在 undo log(回滾日志)中,用于在事務回滾時撤銷已經執行的操作,同時,對數據的修改會先在內存中進行, 并記錄 redo log
- 事務提交或回滾:如果客戶端發送COMMIT語句,MySQL會將內存中的修改持久化到磁盤數據文件,并清理undo log中對應的事務記錄,如果發送ROLLBACK語句,則會根據undo log撤銷事務中已經執行的所有操作
?
MySQL工作原理了解即可
如有錯誤請指出,不喜勿噴