資料庫 基礎面試第一彈

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...