資料庫事務和索引

来源:http://www.cnblogs.com/liyuhui-Z/archive/2017/10/30/7735093.html
-Advertisement-
Play Games

事務的性質: 原子性:同一個事務中的所有操作要不然全部成功要不然全部失敗 一致性:一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。 隔離性:隔離性是當多個用戶併發訪問資料庫時,比如操作同一張表時,資料庫為每一個用戶開啟的事務 ...


事務的性質:

  原子性:同一個事務中的所有操作要不然全部成功要不然全部失敗

  一致性:一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。

  隔離性:隔離性是當多個用戶併發訪問資料庫時,比如操作同一張表時,資料庫為每一個用戶開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。

  持久性:持久性是指一個事務一旦被提交了,那麼對資料庫中的數據的改變就是永久性的

不考慮事務的隔離性會出現的問題:

  臟讀:臟讀是指在一個事務處理過程里讀取了另一個未提交的事務中的數據。

  不可重覆讀:不可重覆讀是指在對於資料庫中的某個數據,一個事務範圍內多次查詢卻返回了不同的數據值,這是由於在查詢間隔,被另一個事務修改並提交了。

  虛度:例如事務T1對一個表中所有的行的某個數據項做了從“1”修改為“2”的操作,這時事務T2又對這個表中插入了一行數據項,而這個數據項的數值還是為“1”並且提交給資料庫。而操作事務T1的用戶如果再查看剛剛修改的數據,會發現還有一行沒有修改,其實這行是從事務T2中添加的,就好像產生幻覺一樣,這就是發生了幻讀。

事務的隔離級別:

  Serializable (串列化):可避免臟讀、不可重覆讀、幻讀的發生

  Repeatable read (可重覆讀):可避免臟讀、不可重覆讀的發生

  Read committed (讀已提交):可避免臟讀的發生

  Read uncommitted (讀未提交):最低級別,任何情況都無法保證

索引

   資料庫中索引的作用是用來加快查找速度,原理是將表中建立索引列的數據獨立出來用特殊的數據結構存儲,(如B-Tree,Hash),資料庫實現通常使用B樹和B+樹

   索引相當於字典的目錄,可以通過查找目錄來得到我們所需要的數據所在的位置,而不需要翻整本字典.

  使用索引需要註意的問題

     索引會帶來額外的開銷,額外的存儲空間,額外的創建時間,額外維護時間,所以要選擇適合的情況去建立索引

  索引的類型

    1. 普通索引:普通索引允許被索引的數據列包含重覆的值。

    2. 唯一索引:被索引包含的數據列不允許有相同的值, 可以包含null     

    3. 主鍵索引:主鍵創建的索引,唯一且不能為空,

    4. 全文索引(mysql):

    5. 聚集索引 : 該索引中鍵值的邏輯順序決定了表中相應行的物理順序。 (比如字典的按照拼音查詢    邏輯順序和物理順序一致),一個表中只能有一個聚集索引

      6. 非聚集索引 :  該索引中索引的邏輯順序與磁碟上行的物理存儲順序不同。(比如字典中的按部首查詢    一個字可能在54頁有可能在554頁)(mysql中沒有)

  適合建立索引的欄位:

    1. 經常搜索

    2. 經常排序

    3. 經常跟在Where語句後面

    4. 數據類型小

    5. 簡單數據類型

    6. 列中儘量避免null


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

-Advertisement-
Play Games
更多相關文章
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...