詳細介紹mysql理論與基礎知識
本篇文章給大家詳細介紹mysql理論和基礎知識。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
mysql架構
一、網路連線層
客戶端連接器(Client Connectors):提供與MySQL伺服器建立的支援。目前幾乎支援所有主流的服務端程式設計技術,例如常見的Java、C、Python、.NET等,它們透過各自API技術與MySQL建立連線
二、服務層(MySQL Server)
服務層是MySQL Server的核心,主要包含系統管理與控制工具、連線池、SQL介面、解析器、查詢最佳化器和快取六個部分。
連接池(Connection Pool):負責儲存和管理客戶端與資料庫的連接,一個執行緒負責管理一個連接。
系統管理與控制工具(Management Services & Utilities):例如備份還原、安全管理、叢集管理等
SQL介面(SQL Interface):用於接受客戶端傳送的各種SQL命令,並且傳回使用者需要查詢的結果。例如DML、DDL、預存程序、視圖、觸發器等。
解析器(Parser):負責將請求的SQL解析產生一個"解析樹"。然後根據一些MySQL規則進一步 檢查解析樹是否合法。
查詢優化器(Optimizer):當「解析樹」通過解析器語法檢查後,將交由優化器將其轉換成執行計 劃,然後與儲存引擎互動。
select uid,name from user where gender=1;
選取–》投影–》連接策略
1)select先根據where語句進行選取,並不是查詢出全部資料再過濾
2)select查詢根據uid和name進行屬性投影,並不是取出所有欄位
3)將前面選取和投影聯接上最終產生查詢結果
快取(Cache&Buffer): 快取機制是由一系列小型快取組成的。例如表格緩存,記錄緩存,權限緩 存,引擎緩存等。如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。
三、儲存引擎層(Pluggable Storage Engines)
#儲存引擎負責MySQL中資料的儲存與擷取,與底層系統檔案互動。 MySQL儲存引擎是插件式的, 伺服器中的查詢執行引擎透過介面與儲存引擎進行通信,介面屏蔽了不同儲存引擎之間的差異 。現在有 多種儲存引擎,各有各的特點,最常見的是MyISAM和InnoDB。
四、系統檔案層(File System)
此層負責將資料庫的資料和日誌儲存在檔案系統之上,並完成與儲存引擎的交互,是檔案的實體儲存層。主要包含日誌文件,數據文件,配置文件,pid 文件,socket 文件等。
日誌檔
錯誤日誌(Error log)
#預設開啟,show variables like '%log_error%'
通用查詢日誌( General query log)
記錄一般查詢語句,show variables like '%general%';
二進位日誌(binary log)
記錄了對MySQL資料庫執行的更改操作,並且記錄了語句的發生時間、執行時長;但是它不會記錄select、show等不修改資料庫的SQL。主要用於資料庫復原和主從複製。
show variables like '%log_bin%'; //是否開啟
show variables like '%binlog%'; //參數檢視
##show binary logs;//查看日誌檔案慢查詢日誌(Slow query log)記錄所有執行時間逾時的查詢SQL,預設為10秒。 show variables like '%slow_query%'; //是否開啟show variables like '%long_query_time%'; //時長#設定檔用於存放MySQL所有的設定資訊文件,例如my.cnf、my.ini等。 資料檔db.opt 檔案:記錄這個函式庫的預設使用的字元集和校驗規則。 frm 檔案:儲存與表格相關的元資料(meta)訊息,包括表格結構的定義資訊等,每一張表都會 有一個frm 檔案。 MYD 檔案:MyISAM 儲存引擎專用,存放 MyISAM 表的資料(data),每一張表都會有一個 .MYD 檔案。 MYI 檔案:MyISAM 儲存引擎專用,存放 MyISAM 表的索引相關信息,每一張 MyISAM 表對 應一個 .MYI 檔案。 ibd檔案和 IBDATA 檔案:存放 InnoDB 的資料檔案(包括索引)。 InnoDB 儲存引擎有兩種 表空間方式:獨享表空間和共用表空間。獨享表空間使用 .ibd 檔案來存放數據,且每一張 InnoDB 表對應一個 .ibd 檔案。共享表空間使用 .ibdata 文件,所有表共同使用一個(或多 個,自行配置).ibdata 文件。 ibdata1 文件:系統表空間資料文件,儲存表元資料、Undo日誌等 。 ib_logfile0、ib_logfile1 檔案:Redo log 日誌檔。 pid 檔案pid 檔案是 mysqld 應用程式在 Unix/Linux 環境下的一個進程文件,和許多其他 Unix/Linux 服務端程式一樣,它存放著自己的進程 id。
socket 檔案
socket 檔案也是在Unix/Linux 環境下才有的,使用者在Unix/Linux 環境下客戶端連線可以不透過TCP/IP 網路直接使用Unix Socket 來連接MySQL。
InnoDB和MyISAM
交易和外鍵
InnoDB支援交易和外鍵,具有安全性和完整性,適合大量insert或update操作
MyISAM不支援交易和外鍵,它提供高速儲存和檢索,適合大量的select查詢操作
鎖定機制
#InnoDB支援行級鎖定,鎖定指定記錄。基於索引來加鎖實作。
MyISAM支援表級鎖,鎖定整張表。
索引結構
InnoDB使用聚集索引(叢集索引),索引和記錄在一起存儲,既快取索引,也快取記錄。
MyISAM使用非聚集索引(非叢集索引),索引和記錄分開。
並發處理能力
MyISAM使用表鎖,會導致寫入操作並發率低,讀取之間不會阻塞,讀寫阻塞。
InnoDB讀寫阻塞可以與隔離等級有關,可以採用多版本並發控制(MVCC)來支援高並發
儲存檔案
InnoDB表對應兩個文件,一個.frm表結構文件,一個.ibd資料檔。 InnoDB表最大支援64TB;
MyISAM表對應三個文件,一個.frm表結構文件,一個MYD表資料文件,一個.MYI索引文件。從 MySQL5.0開始預設限制是256TB。
Redo Log和Binlog區別
Redo Log是屬於InnoDB引擎功能,Binlog是屬於MySQL Server自帶功能,並且是以二進位 檔案記錄。
Redo Log屬於實體日誌,記錄此資料頁更新狀態內容,Binlog是邏輯日誌,記錄更新過程。
Redo Log日誌是循環寫,日誌空間大小是固定,Binlog是追加寫入,寫完一個寫下一個,不 會覆蓋使用。
Redo Log作為伺服器異常宕機後事務資料自動恢復使用,Binlog可以作為主從複製和資料。 Binlog沒有自動crash-safe能力。
在應用程式中可以在從庫追加多個索引來最佳化查詢,主庫這些索引可以不加,用於提升寫入效率。
讀寫分離方案
1寫後立刻讀取
在寫入資料庫後,某個時間段內讀操作就去主庫,之後讀取操作存取從庫。
2二次查詢
先去從庫讀取數據,找不到時就去主庫進行數據讀取。此操作容易將讀取壓力回饋給主庫,為了避免 惡意攻擊,建議對資料庫存取API操作進行封裝,有利於安全性和低耦合。
3根據業務特殊處理
根據業務特性和重要性進行調整,例如重要的,即時性要求高的業務資料讀寫可以放在主庫。對 於次要的業務,即時性要求不高可以進行讀寫分離,查詢時去從庫查詢。
相關推薦:《mysql教學》
###以上是詳細介紹mysql理論與基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

直接從數據庫中恢復被刪除的行通常是不可能的,除非有備份或事務回滾機制。關鍵點:事務回滾:在事務未提交前執行ROLLBACK可恢復數據。備份:定期備份數據庫可用於快速恢復數據。數據庫快照:可創建數據庫只讀副本,在數據誤刪後恢復數據。慎用DELETE語句:仔細檢查條件,避免誤刪數據。使用WHERE子句:明確指定要刪除的數據。使用測試環境:在執行DELETE操作前進行測試。
