DDL語句用於定義資料庫物件(如表、索引、檢視等)。常見的DDL語句包括:
CREATE:用於建立資料庫物件,如建立表、索引、檢視等。
ALTER:用於修改資料庫物件的結構,如修改表的列、新增約束等。
DROP:用於刪除資料庫物件,如刪除表、索引、檢視等。
TRUNCATE:用於刪除表中的所有資料,但保留表結構
DDL(資料定義語言)範例:
# 建立表 CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(100), age INT, salary DECIMAL(10, 2) ); # 修改表結構 ALTER TABLE employees ADD COLUMN department VARCHAR(50); DROP TABLE employees; #刪除表
DML語句用於對資料庫中的資料進行操作(插入、更新、刪除)。常見的DML語句包括:
DML(資料操作語言)範例:
INSERT INTO employees (id, name, age, salary) VALUES (1, 'John Doe', 30, 5000); # 插入資料 UPDATE employees SET salary = 6000 WHERE id = 1; #更新資料 DELETE FROM employees WHERE id = 1; # 刪除資料
DQL語句用於從資料庫中查詢資料。DQL語句的核心是SELECT語句,可以使用SELECT語句查詢滿足特定條件的資料,並對結果進行排序、分組等處理
DQL(資料查詢語言)範例:
SELECT * FROM employees; SELECT * FROM employees WHERE age > 25; # 查詢特定條件的資料 SELECT name, salary FROM employees; # 查詢特定列的資料
DCL語句用於對資料庫的存取許可權進行管理。常見的DCL語句包括:
DCL(資料控制語言)範例:
GRANT SELECT, INSERT ON employees TO user1; #授予使用者存取許可權 REVOKE SELECT, INSERT ON employees FROM user1; # 復原使用者的存取許可權 DENY SELECT, INSERT ON employees TO user1; # 拒絕使用者的存取許可權
索引在資料庫中起著重要的作用,它可以提高資料庫的查詢效能和資料的檢索速度。索引是一種資料結構,用於快速定位和存取資料庫中的特定資料。
作用:
底層結構:
資料庫索引的底層結構可以有多種實現方式,常見的包括以下幾種:
B-樹(B-Tree)索引:B-樹是一種平衡的多路搜尋樹,它的特點是可以自動調整樹的結構以適應資料的插入和刪除操作。B-樹索引常用於磁碟儲存的資料庫,因為它可以減少磁碟存取次數,提高查詢效率。
B+樹(B+Tree)索引:B+樹是在B-樹的基礎上進行優化的一種資料結構。它與B-樹類似,但在葉子節點上儲存了所有的關鍵字和對應的資料指標,這樣可以加快範圍查詢和順序存取的速度。B+樹索引是大多數關係型資料庫中最常用的索引型別。
雜湊(Hash)索引:雜湊索引使用雜湊函數將關鍵字對映到一個固定長度的雜湊值,然後將雜湊值與資料的儲存位置關聯起來。雜湊索引適用於等值查詢,但不適用於範圍查詢或排序操作。
全文(Full-Text)索引:全文索參照於對文字內容進行搜尋,它可以對文字欄位中的關鍵詞進行索引和檢索,支援全文搜尋和模糊匹配。
常見型別:
在常見的關係型資料庫中,常用的索引型別包括:
主鍵索引(Primary Key Index):用於唯一標識表中的記錄,保證主鍵的唯一性和索引的快速存取。
唯一索引(Unique Index):用於保證某個列或列組合的唯一性,可以加速唯一性檢查。
聚集索引(Clustered Index):指定表的物理順序,表中的記錄按照聚集索引的順序儲存。
非聚集索引(Non-Clustered Index):不指定表的物理順序,獨立儲存索引的資料結構。
複合索引(Composite Index):使用多個列組合作為索引的鍵,支援多個列的聯合查詢。
全文索引(Full-Text Index):用於全文搜尋和模糊匹配的索引型別,支援對文字內容進行搜尋。
原子性(Atomicity):事務是一個原子操作單元,要麼全部執行成功,要麼全部失敗回滾。原子性確保事務中的所有操作要麼全都執行,要麼全都不執行,不會出現部分操作成功而部分操作失敗的情況。
一致性(Consistency):事務在執行之前和執行之後,資料庫的完整性約束沒有被破壞。一致性確保資料庫從一個一致的狀態轉移到另一個一致的狀態,它定義了資料在事務執行過程中的合法變化。
隔離性(Isolation):事務的執行是相互隔離的,一個事務的操作不會被其他並行事務所幹擾。隔離性確保事務在並行執行時,每個事務的操作都像是在獨立執行,避免了並行讀寫操作導致的資料不一致問題。
永續性(Durability):一旦事務提交,其所做的修改將永久儲存在資料庫中,即使系統發生故障或重啟。永續性確保事務提交後的修改是永久性的,不會因為系統故障而丟失。
讀未提交(Read Uncommitted):
讀已提交(Read Committed):
可重複讀(Repeatable Read):
序列化(Serializable):
髒讀(Dirty Read):
不可重複讀(Non-repeatable Read):
幻讀(Phantom Read):
死鎖是指兩個或多個事務因為互相等待對方釋放資源而無法繼續執行的狀態。死鎖的發生是由於以下原因之一或多個原因共同作用:
互斥條件(Mutual Exclusion):資源只能同時被一個事務佔用,當某個事務佔用了一個資源後,其他事務無法同時佔用該資源。
請求與保持條件(Hold and Wait):一個事務在持有資源的同時,又申請其他事務所佔有的資源。
不可剝奪條件(No Preemption):資源只能由持有者顯式釋放,其他事務無法強制搶佔。
迴圈等待條件(Circular Wait):多個事務形成一個迴圈等待資源的鏈,每個事務都在等待下一個事務所佔有的資源。
為了解決死鎖問題,可以採取以下幾種常用的解決辦法:
預防死鎖(Deadlock Prevention):
避免死鎖(Deadlock Avoidance):
檢測與恢復(Deadlock Detection and Recovery):
死鎖忽略(Deadlock Ignorance):