MySQL 理論篇之基礎知識


1、數據保存在文件當中可能會出現的問題

    ①數據冗餘:很多內容都是重複的,就像是/etc/passwd中最後一列/bin/bash

    ②不一致性:數據存儲多份時,修改的話每一份都要手動修改,很麻煩

    ③數據訪問困難:當保存數據的文本過大時,載入內存再訪問很困難

    ④數據孤立:數據分散在不同文件中,每個數據保存時沒有統一規範,檢索很困難

    ⑤完整性問題:以銀行轉賬的問題,要保證轉賬前跟轉賬後的結果是一致的

    ⑥原子性問題:同銀行轉賬問題,數據必須以一種穩定狀態轉換爲另一種穩定狀態

    ⑦併發訪問異常:多個人訪問同一個數據文件

    ⑧安全性問題:例如文件查看與訪問授權等等


2、關係模型(結構化數據模型)

    ①關係模型

    實體-關係模型(E-R模型)

    對象關係模型:基於對象的數據模型

    半結構化數據模型:XML(擴展標記語言)


3、關係:關係代數運算

    ①交集:A 交 B

    ②並集:A 並 B

    ③差集:屬於A不屬於B;屬於B不屬於A

    ④全集:總的集合

    ⑤補集:全集 - A 

    

4、SQL(Structure Query Language)語言基本分類

DML(Data Manipulation Language):數據操縱語言例如:INSERT DELETE SELECT UPDATE

DCL(Data Control Language):數據控制語言例如:GRANT REVOKE

DDL(Data Definition Language):數據定義語言例如:CREATE ALTER DROP

5、約束類型

域約束:數據類型約束

外鍵約束:引用完整性約束

主鍵約束:某字段或某些字段組合能唯一標識此字段所屬的實體,並且不允許爲空;所有能唯一標識
的都叫候選鍵,選定之後就成了主鍵

唯一鍵約束:每一行的某字段都不允許出現相同指,可以爲空;一張表只能有一個主鍵,但可以有多個唯一鍵

檢查性約束:對域約束進一步的檢查,避免發生現實邏輯錯誤

6、關係型數據庫視角及文件系統視角

關係型數據庫視角                        文件系統視角

表示層:表                              表示層:文件

邏輯層:存儲引擎                        邏輯層:文件系統

物理層:數據文件                        物理層:磁盤塊

7、關係型數據庫管理系統具備的兩個核心組件

存儲管理器

            權限及完整性管理器                      
            
            事務管理器
            
            文件管理器
            
            緩衝區管理器

查詢管理器

            DML解釋器            
            
            DDL解釋器
            
            查詢執行引擎

8、mysql是使用一個獨立線程響應一個請求的,避免權限交叉及安全問題

單進程多線程模型線程重用提高效率

SMP(Symmetric Multi-Processing)對稱多處理 能力較弱,一個單獨的查詢語句只能在一顆CPU上執行

9、關係運算

            投影:只輸出指定字段或屬性            
            
            選擇:只輸出符合條件的行
            
            自然連接:具有相同名字的屬性上所有取值相同的行
            
            笛卡爾積:(a+b)*(c+d)=ac+ad+bc+bd
            
            並:集合運算

10、MySQL微觀組織結構各組件的功能


wKioL1Z6oA-h53PIAALM5dH7KrM438.jpg


連接管理器:用於偵聽來自客戶端的連接,然後將請求派發給線程管理器

線程管理器:跟蹤用戶線程,確保每一個用戶都能分配到線程,並且在用戶退出後要麼能實現線程重用,要麼銷燬此進程

用戶模塊:驗證用戶身份,判斷用戶是否有訪問服務器權限

命令分發器:用戶具有訪問服務器權限之後,用戶所發起的請求依據其類型將其轉交給特定的模塊

緩存模塊:高速緩存模塊,如果用戶的請求是查詢請求,緩存中有就直接返回

日誌模塊:負責記錄用戶操作的各種日誌

解析器:解析查詢並生成解析樹,然後將生產的解析樹交給特定的模塊

優化器:負責創建響應請求時候的最佳查詢策略,服務器的性能一定的程度上取決於優化器

表定義模塊:DDL或DML之類的操作交由表定義模塊,如表創建、刪除、重命名、移除、更新或插入之類的操作

表維護模塊:檢查、修改、備份、恢復、優化(碎片整理)及解析

複製模塊:例如把主MySQl服務器上的數據同步至從MySQL服務器上就需要用到複製模塊

狀態報告模塊:存儲當前MySQL服務器每一個執行過程中的狀態信息

訪問控制模塊:驗證客戶端用戶是否有權限執行其請求的操作

表管理器:負責創建、讀取或修改表定義文件;維護表描述符高速緩存;管理表鎖

存儲引擎:真正與磁盤上數據交互的接口

11、文件中記錄組織

    ①堆文件組織:一條記錄可以放在文件中的任何地方

    ②順序文件組織:根據"搜索碼"指順序存放

散列文件組織:散列索引函數組織存放


12、表空間

將多個表的數據組織在一個數據文件當中的另外一個邏輯管理組件,有點類似於邏輯卷


13、數據字典

其實就是關係的元數據;例如關係的名字、字段名稱、字段類型及長度、視圖、約束關係、用戶名稱、授權、密碼等等

安裝MySQL後會進行初始化,生產一個mysql名稱的庫,這個其實就是MySQL的數據字典


14、存儲引擎,也被稱爲表類型

MyISAM表: 無事務,表鎖

.frm: 表結構定義文件

.MYD: 表數據

.MYI: 索引


InnoDB表:事務,行鎖

.frm: 表結構

.ibd: 表空間(數據和索引)


15、使用程序設計語言如何跟RDBMS交互

動態SQL:程序設計語言使用函數或者方法與RDBMS服務器建立連接,並進行交互;通過建立連接向SQL服務器發送查詢語句,並將結果保存至變量中而後進行處理;

嵌入式SQL:與動態SQL類似,但其語言必須程序編譯時完全確定下來;


16、定義數據類型的意義

存入的值類型;

佔據的存儲空間;

定長還變長;

如何比較及排序;

是否能夠索引;


17、存儲過程使用Call調用,存儲函數使用SELECT


18、SQL模型

ANSI QUOTES:此種模式下,雙引號("")和反引號(``)意思相同,想要引用字符串只能使用單引號('')

IGNORE_SPACE:此種模式下,內建函數中忽略多餘的空白字符

STRICT_ALL_TABLES:此種模式下,所有非法的輸入都不允許,例如CHAR(3),插入5個字符就會報錯,不允許插入

STRICT_TRANS_TABLES:如果一個值不能插入到一個支持事務表(如Innodb)中,則中斷當前的操作,不影響非事務表

TRADITIONAL:傳統模式



19、MySQL服務器變量

全局變量:對當前會話無效,只對新建立會話有效

顯示

mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode';

mysql> SELECT @@GLOBAL.sql_mode;

設定

mysql> SET GLOBAL sql_mode='STRICT_ALL_TABLES';


會話變量:即時生效,但只對當前會話有效

顯示

mysql> SHOW [SESSION] VARIABLES LIKE 'sql_mode';

mysql> SELECT @@SESSION.sql_mode;

設定

mysql> SET [SESSION] sql_mode='STRICT_ALL_TABLES';



20、鎖

(1)、鎖類型劃分

讀鎖:共享鎖;別的線程能讀,但不能寫

寫鎖:獨佔鎖(排他鎖);別的線程即不能讀,也不能寫


(2)、鎖粒度劃分

從大到小,MySQL服務器僅支持表級別鎖,行鎖需由存儲引擎完成

表鎖:表級別鎖

頁鎖:數據塊級別鎖

行鎖:行級別鎖


21、MySQL配置文件讀取順序

/etc/my.cnf --> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf --> --default-extra-file=/path/to/somefile --> ~/.my.cnf


22、MySQL體系結構圖


wKioL1Z_oFjAnxLVAAGO9AGdEAg103.png









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章