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微觀組織結構各組件的功能
連接管理器:用於偵聽來自客戶端的連接,然後將請求派發給線程管理器 線程管理器:跟蹤用戶線程,確保每一個用戶都能分配到線程,並且在用戶退出後要麼能實現線程重用,要麼銷燬此進程 用戶模塊:驗證用戶身份,判斷用戶是否有訪問服務器權限 命令分發器:用戶具有訪問服務器權限之後,用戶所發起的請求依據其類型將其轉交給特定的模塊 緩存模塊:高速緩存模塊,如果用戶的請求是查詢請求,緩存中有就直接返回 日誌模塊:負責記錄用戶操作的各種日誌 解析器:解析查詢並生成解析樹,然後將生產的解析樹交給特定的模塊 優化器:負責創建響應請求時候的最佳查詢策略,服務器的性能一定的程度上取決於優化器 表定義模塊: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體系結構圖