資料庫 基礎面試第一彈

来源:https://www.cnblogs.com/beyond-tester/archive/2023/09/04/17678395.html
-Advertisement-
Play Games

1. SQL語句類型 1. DDL(Data Definition Language,數據定義語言): DDL語句用於定義資料庫對象(如表、索引、視圖等)。常見的DDL語句包括: CREATE:用於創建資料庫對象,如創建表、索引、視圖等。 ALTER:用於修改資料庫對象的結構,如修改表的列、添加約束 ...


1. SQL語句類型

1. DDL(Data Definition Language,數據定義語言):

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; #刪除表

2. DML(Data Manipulation Language,數據操作語言):

DML語句用於對資料庫中的數據進行操作(插入、更新、刪除)。常見的DML語句包括:

  • SELECT:用於從資料庫中查詢數據。
  • INSERT:用於向表中插入新的數據。
  • UPDATE:用於更新表中的數據。
  • DELETE:用於刪除表中的數據。

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;  # 刪除數據

3. DQL(Data Query Language,數據查詢語言):

DQL語句用於從資料庫中查詢數據。DQL語句的核心是SELECT語句,可以使用SELECT語句查詢滿足特定條件的數據,並對結果進行排序、分組等處理

DQL(數據查詢語言)示例:

SELECT * FROM employees; 

SELECT * FROM employees
WHERE age > 25;     # 查詢特定條件的數據


SELECT name, salary FROM employees; # 查詢特定列的數據

4. DCL(Data Control Language,數據控制語言)

DCL語句用於對資料庫的訪問許可權進行管理。常見的DCL語句包括:

  • GRANT:用於授予用戶訪問許可權。
  • REVOKE:用於撤銷用戶的訪問許可權。
  • DENY:用於拒絕用戶的訪問許可權。

DCL(數據控制語言)示例:

GRANT SELECT, INSERT ON employees TO user1;  #授予用戶訪問許可權

REVOKE SELECT, INSERT ON employees FROM user1; # 撤銷用戶的訪問許可權

DENY SELECT, INSERT ON employees TO user1; # 拒絕用戶的訪問許可權

2. 索引作用,底層結構及常見類型

索引在資料庫中起著重要的作用,它可以提高資料庫的查詢性能和數據的檢索速度。索引是一種數據結構,用於快速定位和訪問資料庫中的特定數據。

作用:

  • 提高查詢性能:通過使用索引,可以減少資料庫查詢的數據量,從而提高查詢速度。
  • 加速數據檢索:索引可以幫助資料庫快速定位和訪問滿足特定條件的數據,減少數據的掃描時間。

底層結構:
資料庫索引的底層結構可以有多種實現方式,常見的包括以下幾種:

  1. B-樹(B-Tree)索引:B-樹是一種平衡的多路搜索樹,它的特點是可以自動調整樹的結構以適應數據的插入和刪除操作。B-樹索引常用於磁碟存儲的資料庫,因為它可以減少磁碟訪問次數,提高查詢效率。

  2. B+樹(B+Tree)索引:B+樹是在B-樹的基礎上進行優化的一種數據結構。它與B-樹類似,但在葉子節點上存儲了所有的關鍵字和對應的數據指針,這樣可以加快範圍查詢和順序訪問的速度。B+樹索引是大多數關係型資料庫中最常用的索引類型。

  3. 哈希(Hash)索引:哈希索引使用哈希函數將關鍵字映射到一個固定長度的哈希值,然後將哈希值與數據的存儲位置關聯起來。哈希索引適用於等值查詢,但不適用於範圍查詢或排序操作。

  4. 全文(Full-Text)索引:全文索引用於對文本內容進行搜索,它可以對文本欄位中的關鍵詞進行索引和檢索,支持全文搜索和模糊匹配。

常見類型:
在常見的關係型資料庫中,常用的索引類型包括:

    1. 主鍵索引(Primary Key Index):用於唯一標識表中的記錄,保證主鍵的唯一性和索引的快速訪問。

    2. 唯一索引(Unique Index):用於保證某個列或列組合的唯一性,可以加速唯一性檢查。

    3. 聚集索引(Clustered Index):指定表的物理順序,表中的記錄按照聚集索引的順序存儲。

    4. 非聚集索引(Non-Clustered Index):不指定表的物理順序,獨立存儲索引的數據結構。

    5. 複合索引(Composite Index):使用多個列組合作為索引的鍵,支持多個列的聯合查詢。

    6. 全文索引(Full-Text Index):用於全文搜索和模糊匹配的索引類型,支持對文本內容進行搜索。

3. 事務的特性

  1. 原子性(Atomicity):事務是一個原子操作單元,要麼全部執行成功,要麼全部失敗回滾。原子性確保事務中的所有操作要麼全都執行,要麼全都不執行,不會出現部分操作成功而部分操作失敗的情況。

  2. 一致性(Consistency):事務在執行之前和執行之後,資料庫的完整性約束沒有被破壞。一致性確保資料庫從一個一致的狀態轉移到另一個一致的狀態,它定義了數據在事務執行過程中的合法變化。

  3. 隔離性(Isolation):事務的執行是相互隔離的,一個事務的操作不會被其他併發事務所干擾。隔離性確保事務在併發執行時,每個事務的操作都像是在獨立執行,避免了併發讀寫操作導致的數據不一致問題。

  4. 持久性(Durability):一旦事務提交,其所做的修改將永久保存在資料庫中,即使系統發生故障或重啟。持久性確保事務提交後的修改是永久性的,不會因為系統故障而丟失。

4. 事務的隔離級別

  1. 讀未提交(Read Uncommitted):

    • 最低的隔離級別,事務中的未提交修改對其他事務都是可見的。
    • 可能導致臟讀(Dirty Read),即讀取到其他事務尚未提交的數據,可能是不一致的數據。
    • 存在幻讀(Phantom Read),即在同一個事務中多次執行同樣的查詢,結果集不一致。
  2. 讀已提交(Read Committed):

    • 事務只能讀取到已經提交的數據,未提交的數據對其他事務不可見。
    • 避免了臟讀的問題,但仍可能導致幻讀。
    • 大多數常見資料庫的預設隔離級別。
  3. 可重覆讀(Repeatable Read):

    • 保證了在同一事務中多次讀取同一數據時,結果保持一致。
    • 讀取的數據是在事務開始時確定的快照,即使其他事務對數據進行修改也不可見。
    • 避免了臟讀和幻讀的問題。
  4. 序列化(Serializable):

    • 最高的隔離級別,通過強制事務串列執行來避免併發問題。
    • 保證了事務之間的完全隔離,避免了臟讀、幻讀和不可重覆讀的問題。
    • 性能較差,一般情況下只在特殊需求下使用。

5. 事務併發引起的三大問題

  1. 臟讀(Dirty Read):

    • 臟讀指的是一個事務讀取了另一個事務尚未提交的數據。當一個事務讀取到了被另一個事務修改但尚未提交的數據時,如果另一個事務最終回滾,則讀取到的數據是無效的。
    • 臟讀可能導致數據不一致性和錯誤的結果。
  2. 不可重覆讀(Non-repeatable Read):

    • 不可重覆讀指的是在同一個事務中,多次讀取同一數據時,得到的結果不一致。這是因為在讀取過程中,其他併發事務對該數據進行了修改或刪除。
    • 不可重覆讀可能導致事務在多次讀取同一數據時無法保持一致性,破壞了事務的隔離性。
  3. 幻讀(Phantom Read):

    • 幻讀是指在同一個事務中,多次執行同樣的查詢,得到的結果集不一致。這是因為在查詢過程中,其他併發事務插入了新的數據行,導致結果集發生了變化。
    • 幻讀可能導致事務在同一查詢中讀取到不同的數據行,無法保持一致性。

6. 死鎖的原因及解決辦法:

死鎖是指兩個或多個事務因為互相等待對方釋放資源而無法繼續執行的狀態。死鎖的發生是由於以下原因之一或多個原因共同作用:

  1. 互斥條件(Mutual Exclusion):資源只能同時被一個事務占用,當某個事務占用了一個資源後,其他事務無法同時占用該資源。

  2. 請求與保持條件(Hold and Wait):一個事務在持有資源的同時,又申請其他事務所占有的資源。

  3. 不可剝奪條件(No Preemption):資源只能由持有者顯式釋放,其他事務無法強制搶占。

  4. 迴圈等待條件(Circular Wait):多個事務形成一個迴圈等待資源的鏈,每個事務都在等待下一個事務所占有的資源。

為瞭解決死鎖問題,可以採取以下幾種常用的解決辦法:

  1. 預防死鎖(Deadlock Prevention):

    • 通過破壞死鎖發生的四個必要條件中的一個或多個,來預防死鎖的發生。
    • 可以在系統設計階段採用資源分配策略、事務調度策略等方式來預防死鎖。
  2. 避免死鎖(Deadlock Avoidance):

    • 在運行時動態判斷是否分配資源,避免可能導致死鎖的資源分配情況。
    • 通過資源分配的安全性檢查和資源請求的合理判斷,避免進入可能導致死鎖的狀態。
  3. 檢測與恢復(Deadlock Detection and Recovery):

    • 允許死鎖發生,但通過周期性地檢測系統中的死鎖狀態,並採取恢復措施來解除死鎖。
    • 可以使用圖演算法(如資源分配圖)來檢測死鎖,並通過回滾、搶占資源等方式進行恢復。
  4. 死鎖忽略(Deadlock Ignorance):

    • 假設死鎖很少發生或發生死鎖的代價較低,可以忽略死鎖問題,不採取專門的死鎖處理措施。
    • 此方法適用於某些特定環境下,如批處理系統等。

 

 

  

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # Unity UGUI的Scrollbar(滾動條)組件的介紹及使用 ## 一、什麼是Scrollbar組件? Scrollbar組件是Unity中UGUI系統提供的一種UI組件,主要用於在UI界面中提供滾動條功能,使用戶可以通過滾動條來查看超出屏幕範圍的內容。 ## 二、Scrollbar組件是 ...
  • 在我寫[在.NET Framework中使用RocketMQ(阿裡雲版)]這篇博客的時候,因為封裝了很多代碼在單獨的DLL中,包括生產者、消費者以及官方SDK等等,然後都在博客中體現出來導致博客大量代碼,然後有位讀者就建議打包成NuGet包,大家也可以直接安裝調用,我也覺得很不錯,於是就有了這篇文章... ...
  • # Redis 文章內容主要參考b站 運維實戰課程 的redis視頻:[redis的課程介紹_嗶哩嗶哩_bilibili](https://www.bilibili.com/video/BV1cP4y1D7yh?p=1) ## 簡介 1.Redis是一個緩存資料庫,主要是做緩存。什麼是緩存?也就是緩 ...
  • [toc] # Linux運維工程師面試題(6) > 祝各位小伙伴們早日找到自己心儀的工作。 > 持續學習才不會被淘汰。 > 地球不爆炸,我們不放假。 > 機會總是留給有有準備的人的。 > 加油,打工人! ## 1 資料庫事務的四個特性及含義 資料庫事務的4個特性:原⼦性、持久性、⼀致性、隔離性 - ...
  • 哈嘍大家好,我是鹹魚 我們知道字典是 Python 中最重要且最有用的內置數據結構之一,它們無處不在,是語言本身的基本組成部分 我們可以使用字典來解決許多編程問題,那麼今天我們就來看看**如何在 Python 中遍歷字典** 全文內容:https://realpython.com/iterate-t ...
  • 寶塔Linux面板是提升運維效率的伺服器管理軟體,目前使用免費的版本功能齊全,已經足夠使用了。 [西瓜程式猿]使用阿裡雲伺服器網以CentOS操作系統為例,安裝寶塔Linux面板,先遠程連接到雲伺服器,然後執行寶塔面板安裝命令,系統會自動安裝寶塔面板,安裝完成後會返回面板地址、賬號和密碼 。 ...
  • 本篇文章探索了文件系統的功能規劃,著重討論了文件存儲、索引節點和目錄項的管理、緩存策略以及文件數據的存儲等方面。文件系統作為電腦系統中重要的組成部分,對於實現高效、可靠的文件管理與訪問機制至關重要。通過深入瞭解文件系統的基本單位、元信息記錄和目錄結構,我們可以更好地理解文件系統的工作原理,本文旨在... ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202309/3076680-20230904164459431-1322523641.png) # 1. 儘管SQL標準指定了部分函數,但資料庫廠商並沒有遵循這些函數規範 # 2. 字元串 ## 2.1. c ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...