1. SQL語(yǔ)句類型
1. DDL(Data Definition Language,數(shù)據(jù)定義語(yǔ)言):
DDL語(yǔ)句用于定義數(shù)據(jù)庫(kù)對(duì)象(如表、索引、視圖等)。常見的DDL語(yǔ)句包括:
CREATE:用于創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象,如創(chuàng)建表、索引、視圖等。
ALTER:用于修改數(shù)據(jù)庫(kù)對(duì)象的結(jié)構(gòu),如修改表的列、添加約束等。
DROP:用于刪除數(shù)據(jù)庫(kù)對(duì)象,如刪除表、索引、視圖等。
TRUNCATE:用于刪除表中的所有數(shù)據(jù),但保留表結(jié)構(gòu)
DDL(數(shù)據(jù)定義語(yǔ)言)示例:
# 創(chuàng)建表 CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(100), age INT, salary DECIMAL(10, 2) ); # 修改表結(jié)構(gòu) ALTER TABLE employees ADD COLUMN department VARCHAR(50); DROP TABLE employees; #刪除表
2. DML(Data Manipulation Language,數(shù)據(jù)操作語(yǔ)言):
DML語(yǔ)句用于對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行操作(插入、更新、刪除)。常見的DML語(yǔ)句包括:
- SELECT:用于從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)。
- INSERT:用于向表中插入新的數(shù)據(jù)。
- UPDATE:用于更新表中的數(shù)據(jù)。
- DELETE:用于刪除表中的數(shù)據(jù)。
DML(數(shù)據(jù)操作語(yǔ)言)示例:
INSERT INTO employees (id, name, age, salary) VALUES (1, 'John Doe', 30, 5000); # 插入數(shù)據(jù) UPDATE employees SET salary = 6000 WHERE id = 1; #更新數(shù)據(jù) DELETE FROM employees WHERE id = 1; # 刪除數(shù)據(jù)
3. DQL(Data Query Language,數(shù)據(jù)查詢語(yǔ)言):
DQL語(yǔ)句用于從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)。DQL語(yǔ)句的核心是SELECT語(yǔ)句,可以使用SELECT語(yǔ)句查詢滿足特定條件的數(shù)據(jù),并對(duì)結(jié)果進(jìn)行排序、分組等處理
DQL(數(shù)據(jù)查詢語(yǔ)言)示例:
SELECT * FROM employees; SELECT * FROM employees WHERE age > 25; # 查詢特定條件的數(shù)據(jù) SELECT name, salary FROM employees; # 查詢特定列的數(shù)據(jù)
4.?DCL(Data Control Language,數(shù)據(jù)控制語(yǔ)言)
DCL語(yǔ)句用于對(duì)數(shù)據(jù)庫(kù)的訪問權(quán)限進(jìn)行管理。常見的DCL語(yǔ)句包括:
- GRANT:用于授予用戶訪問權(quán)限。
- REVOKE:用于撤銷用戶的訪問權(quán)限。
- DENY:用于拒絕用戶的訪問權(quán)限。
DCL(數(shù)據(jù)控制語(yǔ)言)示例:
GRANT SELECT, INSERT ON employees TO user1; #授予用戶訪問權(quán)限 REVOKE SELECT, INSERT ON employees FROM user1; # 撤銷用戶的訪問權(quán)限 DENY SELECT, INSERT ON employees TO user1; # 拒絕用戶的訪問權(quán)限
2. 索引作用,底層結(jié)構(gòu)及常見類型
索引在數(shù)據(jù)庫(kù)中起著重要的作用,它可以提高數(shù)據(jù)庫(kù)的查詢性能和數(shù)據(jù)的檢索速度。索引是一種數(shù)據(jù)結(jié)構(gòu),用于快速定位和訪問數(shù)據(jù)庫(kù)中的特定數(shù)據(jù)。
作用:
- 提高查詢性能:通過使用索引,可以減少數(shù)據(jù)庫(kù)查詢的數(shù)據(jù)量,從而提高查詢速度。
- 加速數(shù)據(jù)檢索:索引可以幫助數(shù)據(jù)庫(kù)快速定位和訪問滿足特定條件的數(shù)據(jù),減少數(shù)據(jù)的掃描時(shí)間。
底層結(jié)構(gòu):
數(shù)據(jù)庫(kù)索引的底層結(jié)構(gòu)可以有多種實(shí)現(xiàn)方式,常見的包括以下幾種:
-
B-樹(B-Tree)索引:B-樹是一種平衡的多路搜索樹,它的特點(diǎn)是可以自動(dòng)調(diào)整樹的結(jié)構(gòu)以適應(yīng)數(shù)據(jù)的插入和刪除操作。B-樹索引常用于磁盤存儲(chǔ)的數(shù)據(jù)庫(kù),因?yàn)樗梢詼p少磁盤訪問次數(shù),提高查詢效率。
-
B+樹(B+Tree)索引:B+樹是在B-樹的基礎(chǔ)上進(jìn)行優(yōu)化的一種數(shù)據(jù)結(jié)構(gòu)。它與B-樹類似,但在葉子節(jié)點(diǎn)上存儲(chǔ)了所有的關(guān)鍵字和對(duì)應(yīng)的數(shù)據(jù)指針,這樣可以加快范圍查詢和順序訪問的速度。B+樹索引是大多數(shù)關(guān)系型數(shù)據(jù)庫(kù)中最常用的索引類型。
-
哈希(Hash)索引:哈希索引使用哈希函數(shù)將關(guān)鍵字映射到一個(gè)固定長(zhǎng)度的哈希值,然后將哈希值與數(shù)據(jù)的存儲(chǔ)位置關(guān)聯(lián)起來。哈希索引適用于等值查詢,但不適用于范圍查詢或排序操作。
-
全文(Full-Text)索引:全文索引用于對(duì)文本內(nèi)容進(jìn)行搜索,它可以對(duì)文本字段中的關(guān)鍵詞進(jìn)行索引和檢索,支持全文搜索和模糊匹配。
常見類型:
在常見的關(guān)系型數(shù)據(jù)庫(kù)中,常用的索引類型包括:
-
主鍵索引(Primary Key Index):用于唯一標(biāo)識(shí)表中的記錄,保證主鍵的唯一性和索引的快速訪問。
-
唯一索引(Unique Index):用于保證某個(gè)列或列組合的唯一性,可以加速唯一性檢查。
-
聚集索引(Clustered Index):指定表的物理順序,表中的記錄按照聚集索引的順序存儲(chǔ)。
-
非聚集索引(Non-Clustered Index):不指定表的物理順序,獨(dú)立存儲(chǔ)索引的數(shù)據(jù)結(jié)構(gòu)。
-
復(fù)合索引(Composite Index):使用多個(gè)列組合作為索引的鍵,支持多個(gè)列的聯(lián)合查詢。
-
全文索引(Full-Text Index):用于全文搜索和模糊匹配的索引類型,支持對(duì)文本內(nèi)容進(jìn)行搜索。
3. 事務(wù)的特性
-
原子性(Atomicity):事務(wù)是一個(gè)原子操作單元,要么全部執(zhí)行成功,要么全部失敗回滾。原子性確保事務(wù)中的所有操作要么全都執(zhí)行,要么全都不執(zhí)行,不會(huì)出現(xiàn)部分操作成功而部分操作失敗的情況。
-
一致性(Consistency):事務(wù)在執(zhí)行之前和執(zhí)行之后,數(shù)據(jù)庫(kù)的完整性約束沒有被破壞。一致性確保數(shù)據(jù)庫(kù)從一個(gè)一致的狀態(tài)轉(zhuǎn)移到另一個(gè)一致的狀態(tài),它定義了數(shù)據(jù)在事務(wù)執(zhí)行過程中的合法變化。
-
隔離性(Isolation):事務(wù)的執(zhí)行是相互隔離的,一個(gè)事務(wù)的操作不會(huì)被其他并發(fā)事務(wù)所干擾。隔離性確保事務(wù)在并發(fā)執(zhí)行時(shí),每個(gè)事務(wù)的操作都像是在獨(dú)立執(zhí)行,避免了并發(fā)讀寫操作導(dǎo)致的數(shù)據(jù)不一致問題。
-
持久性(Durability):一旦事務(wù)提交,其所做的修改將永久保存在數(shù)據(jù)庫(kù)中,即使系統(tǒng)發(fā)生故障或重啟。持久性確保事務(wù)提交后的修改是永久性的,不會(huì)因?yàn)橄到y(tǒng)故障而丟失。
4. 事務(wù)的隔離級(jí)別
-
讀未提交(Read Uncommitted):
- 最低的隔離級(jí)別,事務(wù)中的未提交修改對(duì)其他事務(wù)都是可見的。
- 可能導(dǎo)致臟讀(Dirty Read),即讀取到其他事務(wù)尚未提交的數(shù)據(jù),可能是不一致的數(shù)據(jù)。
- 存在幻讀(Phantom Read),即在同一個(gè)事務(wù)中多次執(zhí)行同樣的查詢,結(jié)果集不一致。
-
讀已提交(Read Committed):
- 事務(wù)只能讀取到已經(jīng)提交的數(shù)據(jù),未提交的數(shù)據(jù)對(duì)其他事務(wù)不可見。
- 避免了臟讀的問題,但仍可能導(dǎo)致幻讀。
- 大多數(shù)常見數(shù)據(jù)庫(kù)的默認(rèn)隔離級(jí)別。
-
可重復(fù)讀(Repeatable Read):
- 保證了在同一事務(wù)中多次讀取同一數(shù)據(jù)時(shí),結(jié)果保持一致。
- 讀取的數(shù)據(jù)是在事務(wù)開始時(shí)確定的快照,即使其他事務(wù)對(duì)數(shù)據(jù)進(jìn)行修改也不可見。
- 避免了臟讀和幻讀的問題。
-
序列化(Serializable):
- 最高的隔離級(jí)別,通過強(qiáng)制事務(wù)串行執(zhí)行來避免并發(fā)問題。
- 保證了事務(wù)之間的完全隔離,避免了臟讀、幻讀和不可重復(fù)讀的問題。
- 性能較差,一般情況下只在特殊需求下使用。
5. 事務(wù)并發(fā)引起的三大問題
-
臟讀(Dirty Read):
- 臟讀指的是一個(gè)事務(wù)讀取了另一個(gè)事務(wù)尚未提交的數(shù)據(jù)。當(dāng)一個(gè)事務(wù)讀取到了被另一個(gè)事務(wù)修改但尚未提交的數(shù)據(jù)時(shí),如果另一個(gè)事務(wù)最終回滾,則讀取到的數(shù)據(jù)是無(wú)效的。
- 臟讀可能導(dǎo)致數(shù)據(jù)不一致性和錯(cuò)誤的結(jié)果。
-
不可重復(fù)讀(Non-repeatable Read):
- 不可重復(fù)讀指的是在同一個(gè)事務(wù)中,多次讀取同一數(shù)據(jù)時(shí),得到的結(jié)果不一致。這是因?yàn)樵谧x取過程中,其他并發(fā)事務(wù)對(duì)該數(shù)據(jù)進(jìn)行了修改或刪除。
- 不可重復(fù)讀可能導(dǎo)致事務(wù)在多次讀取同一數(shù)據(jù)時(shí)無(wú)法保持一致性,破壞了事務(wù)的隔離性。
-
幻讀(Phantom Read):
- 幻讀是指在同一個(gè)事務(wù)中,多次執(zhí)行同樣的查詢,得到的結(jié)果集不一致。這是因?yàn)樵诓樵冞^程中,其他并發(fā)事務(wù)插入了新的數(shù)據(jù)行,導(dǎo)致結(jié)果集發(fā)生了變化。
- 幻讀可能導(dǎo)致事務(wù)在同一查詢中讀取到不同的數(shù)據(jù)行,無(wú)法保持一致性。
6. 死鎖的原因及解決辦法:
死鎖是指兩個(gè)或多個(gè)事務(wù)因?yàn)榛ハ嗟却龑?duì)方釋放資源而無(wú)法繼續(xù)執(zhí)行的狀態(tài)。死鎖的發(fā)生是由于以下原因之一或多個(gè)原因共同作用:
-
互斥條件(Mutual Exclusion):資源只能同時(shí)被一個(gè)事務(wù)占用,當(dāng)某個(gè)事務(wù)占用了一個(gè)資源后,其他事務(wù)無(wú)法同時(shí)占用該資源。
-
請(qǐng)求與保持條件(Hold and Wait):一個(gè)事務(wù)在持有資源的同時(shí),又申請(qǐng)其他事務(wù)所占有的資源。
-
不可剝奪條件(No Preemption):資源只能由持有者顯式釋放,其他事務(wù)無(wú)法強(qiáng)制搶占。
-
循環(huán)等待條件(Circular Wait):多個(gè)事務(wù)形成一個(gè)循環(huán)等待資源的鏈,每個(gè)事務(wù)都在等待下一個(gè)事務(wù)所占有的資源。
為了解決死鎖問題,可以采取以下幾種常用的解決辦法:
-
預(yù)防死鎖(Deadlock Prevention):
- 通過破壞死鎖發(fā)生的四個(gè)必要條件中的一個(gè)或多個(gè),來預(yù)防死鎖的發(fā)生。
- 可以在系統(tǒng)設(shè)計(jì)階段采用資源分配策略、事務(wù)調(diào)度策略等方式來預(yù)防死鎖。
-
避免死鎖(Deadlock Avoidance):
- 在運(yùn)行時(shí)動(dòng)態(tài)判斷是否分配資源,避免可能導(dǎo)致死鎖的資源分配情況。
- 通過資源分配的安全性檢查和資源請(qǐng)求的合理判斷,避免進(jìn)入可能導(dǎo)致死鎖的狀態(tài)。
-
檢測(cè)與恢復(fù)(Deadlock Detection and Recovery):
- 允許死鎖發(fā)生,但通過周期性地檢測(cè)系統(tǒng)中的死鎖狀態(tài),并采取恢復(fù)措施來解除死鎖。
- 可以使用圖算法(如資源分配圖)來檢測(cè)死鎖,并通過回滾、搶占資源等方式進(jìn)行恢復(fù)。
-
死鎖忽略(Deadlock Ignorance):
- 假設(shè)死鎖很少發(fā)生或發(fā)生死鎖的代價(jià)較低,可以忽略死鎖問題,不采取專門的死鎖處理措施。
- 此方法適用于某些特定環(huán)境下,如批處理系統(tǒng)等。
?
?
文章來源地址http://www.zghlxwxcb.cn/news/detail-694477.html文章來源:http://www.zghlxwxcb.cn/news/detail-694477.html
到了這里,關(guān)于數(shù)據(jù)庫(kù) 基礎(chǔ)面試第一彈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!