MySQL 是最流行的關系型數(shù)據(jù)庫管理系統(tǒng),在 WEB 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關系數(shù)據(jù)庫管理系統(tǒng))應用軟件之一。
RDBMS 即關系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System)的特點:
1.數(shù)據(jù)以表格的形式出現(xiàn)
2.每行為各種記錄名稱
3.每列為記錄名稱所對應的數(shù)據(jù)域
4.許多的行和列組成一張表單
5.若干的表單組成database
MySQL 是一個關系型數(shù)據(jù)庫管理系統(tǒng),由瑞典 MySQL AB 公司開發(fā),目前屬于 Oracle 公司。MySQL 是一種關聯(lián)數(shù)據(jù)庫管理系統(tǒng),關聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
提供連接MySQL服務器功能的常用工具集
MySQL實例,真正提供數(shù)據(jù)存儲和數(shù)據(jù)處理功能的MySQL服務器進程
MySQL服務器守護程序,在后臺運行。它管理著客戶端請求。mysqld是一個多線程的進程,允許多個會話連接,端口監(jiān)聽連接,管理MySQL實例
MySQL的要求的內存空間是動態(tài)的,比如 innodb_buffer_pool_size (from 5.7.5), key_buffer_size。每個會話都有獨一無二的執(zhí)行計劃,我們只能共享同一會話域內的數(shù)據(jù)集。
為每個客戶端連接分配一個會話,動態(tài)分配和回收。用于查詢處理,每個會話同時具備一個緩沖區(qū)。每個會話是作為一個線程執(zhí)行的
檢測SQL語句語法,為每條SQL語句生成SQL_ID,用戶認證也發(fā)生在這個階段
創(chuàng)造一個有效率的執(zhí)行計劃(根據(jù)具體的存儲引擎)。它將會重寫查詢語句。比如:InnoDB有共享緩沖區(qū),所以,優(yōu)化器會首先從預先緩存的數(shù)據(jù)中提取。使用 table statistics optimizer將會為SQL查詢生成一個執(zhí)行計劃。用戶權限檢查也發(fā)生在這個階段。
緩存對象元信息和統(tǒng)計信息
共享在內存中的完全一樣的查詢語句。如果完全相同的查詢在緩存命中,MySQL服務器會直接從緩存中去檢索結果。緩存是會話間共享的,所以為一個客戶生成的結果集也能為另一個客戶所用。查詢緩存基于SQL_ID。將SELECT語句寫入視圖就是查詢緩存最好的例子。
緩存表索引。MySQL keys是索引。如果索引數(shù)據(jù)量小,它將緩存索引結構和葉子節(jié)點(存儲索引數(shù)據(jù))。如果索引很大,它只會緩存索引結構,通常供MyISAM存儲引擎使用
到MySQL5.7為止,總共有五種,分別是TCP/IP,TLS/SSL,Unix Sockets,Shared Memory,Named pipes,下面我們就來看看這五種的區(qū)別:
方式 | 默認開啟 | 支持系統(tǒng) | 只支持本機 | 如何開啟 | 參數(shù)配置 |
---|---|---|---|---|---|
TCP/IP | 是 | 所有系統(tǒng) | 否 | –skip-networking=yes/no | –port–bind-address |
TLS/SSL | 是 | 所有系統(tǒng)(基于TCP/IP)之上 | 否 | –ssl=yes/no | –ssl-* options |
Unix Sockets | 是 | 類Unix系統(tǒng) | 是 | –socket= 來關閉 | –socket=socket path |
Shared Memory | 否 | Windows系統(tǒng) | 是 | –shared-memory=on/off. | –shared-memory-base-name= |
Named pipes | 否 | Windows系統(tǒng) | 否 | –enable-named-pipe=on/off | –socket= |
協(xié)議頭:
每個協(xié)議頭共4個字節(jié)
- 包數(shù)據(jù)長度:
前三個字節(jié)表示數(shù)據(jù)部分的長度(不包括協(xié)議頭),三字節(jié)能表示的最大長度是16M-1(2^24 - 1),如果要發(fā)送的數(shù)據(jù)部分大于這個長度,要進行拆包,每16M-1個長度為一包。接收端在接受數(shù)據(jù)的時候,如果檢測到包的長度是16M-1,說明后續(xù)還有數(shù)據(jù)部分,直到接收到16M-1長度的數(shù)據(jù)包結束。這意味著最后一包的數(shù)據(jù)長度可能為0.
序號:
1個字節(jié),從0開始遞增。當發(fā)送一個新的sql、數(shù)據(jù)庫重連,該值清0(函數(shù)sql/Net_serv.cc : net_clear).
數(shù)據(jù)類型:
除了固定長度的整型或者字符串之外,還有其他幾種類型的數(shù)據(jù)。(固定長度字段數(shù)據(jù)的存?。篿nclude/Mybyte_order.h : 存值 intstore 取值:intkorr 多字節(jié)的處理按照小端優(yōu)先的方式)
1. 可變長度的整數(shù) 對該類數(shù)據(jù)的存取在函數(shù):sql-common/Pack.c: 存整數(shù): net_store_length 讀整數(shù):net_field_length 如果數(shù)值251,直接用一個字節(jié)存儲這個值。 如果251=數(shù)值2^16, 采用3個字節(jié)存儲,第一個字節(jié)是252, 另外2個字節(jié)存儲整數(shù)內容 如果2^16=數(shù)值2^24,采用4字節(jié)存儲,第一個字節(jié)是252,另外3個字節(jié)存儲整數(shù)內容 如果2^24=數(shù)值2^64,采用9字節(jié)存儲,第一個字節(jié)255,另外8字節(jié)存儲整數(shù)內容 如果第一個字節(jié)為251,表示該整數(shù)字段為null 如果第一個字節(jié)為255,表示該字節(jié)是ERR包的第一個字節(jié) 2. 可編碼長度的字符串 字符串的長度采用可變長度的整數(shù)進行編碼。
可以把 SQL 分為兩個部分:數(shù)據(jù)操作語言 (DML) 和 數(shù)據(jù)定義語言 (DDL)。 SQL (結構化查詢語言)是用于執(zhí)行查詢的語法。但是 SQL 語言也包含用于更新、插入和刪除記錄的語法。
查詢和更新指令構成了 SQL 的 DML 部分:
SELECT - 從數(shù)據(jù)庫表中獲取數(shù)據(jù)UPDATE - 更新數(shù)據(jù)庫表中的數(shù)據(jù)DELETE - 從數(shù)據(jù)庫表中刪除數(shù)據(jù)INSERT INTO - 向數(shù)據(jù)庫表中插入數(shù)據(jù)SQL 的數(shù)據(jù)定義語言 (DDL) 部分使我們有能力創(chuàng)建或刪除表格。我們也可以定義索引(鍵),規(guī)定表之間的鏈接,以及施加表間的約束。
SQL 中最重要的 DDL 語句:
CREATE DATABASE - 創(chuàng)建新數(shù)據(jù)庫ALTER DATABASE - 修改數(shù)據(jù)庫CREATE TABLE - 創(chuàng)建新表ALTER TABLE - 變更(改變)數(shù)據(jù)庫表DROP TABLE - 刪除表CREATE INDEX - 創(chuàng)建索引(搜索鍵)DROP INDEX - 刪除索引
這篇文章從宏觀和使用角度去了解Mysql是什么,后續(xù)深入。也請大家多多關注腳本之家的更多內容