首頁 資料庫 mysql教程 詳解MySQL資料庫之事務及儲存引擎

詳解MySQL資料庫之事務及儲存引擎

Nov 27, 2019 pm 06:07 PM
mysql 事務 儲存引擎 資料庫

詳解MySQL資料庫之事務及儲存引擎

一、關係型資料庫與非關係型資料庫

1、關係型資料庫的特點:

1)資料以表格的形式出現

2)每行為各種記錄名稱

#3)每列為記錄名稱所對應的資料域

4)許多的行和列組成一張表單

# 5)若干的表單組成資料庫

2、關係型資料庫的優點:

1)複雜的查詢:可以使用SQL語句方便地在一個表格以及多個表格之間做非常複雜的資料查詢。

2)事務支援:使得對於安全效能很高的資料存取要求得以實現。

3、非關係型資料庫的優點:

1)效能:NOSQL是基於鍵值對的,可以想像成表中的主鍵和值的對應關係,不需要經過SQL層的解析,所以效能非常高。

2)可擴展性:同樣也是因為基於鍵值對,資料之間沒有耦合性,所以非常容易水平擴展。

問題:三種傳統資料庫之間的差異?

答:三者之間是根據資料之間的聯繫而去別的,層次性資料庫是樹狀結構、網狀型資料庫是連結指標結構、關係型資料庫是二維表結構。

二、事務(ACID)

#交易(transaction)是作為單一邏輯工作單元執行的一系列操作,這些操作作為一個整體一起向系統提交,要么都執行,要么都不執行。 事務是一個不可分割的工作邏輯單元。

交易必須具備以下四個屬性,簡稱ACID屬性:

原子性(atomicity) :事務是一個完整的操作。事物的各部操作是不可分的(原子的);要么都執行,要么都不執行;

一致性(consistency):當事務完成時,資料必須處於一致狀態;

隔離性(isolation):對資料進行修改的所有並發事務是彼此隔離的,這表明事務必須是獨立的,它不應以任何形式依賴或影響其他事務;

永久性(durability):事務完成後,它對資料庫的修改是永久的,事務日誌能夠保持事務的永久性。

交易的隔離等級:

#讀取未提交內容(又稱髒讀read uncommitted):指所有交易都可以看到其他未提交交易的執行結果。可能有髒讀、不可重複讀和幻讀問題。

讀取提交內容(read commited):一個交易只能看見已經提交的事務所所做的改變。可以避免髒讀,可能有不可重複讀和幻讀問題。

可重複讀取(repeatable read):是MySQL的預設交易隔離級別,它確保相同交易的多個實例在並發讀取資料時,會看到同樣的數據行。可以避免髒讀和不可重複讀,可能會有幻讀問題。

可串行化(serializable):是最高的隔離級別,它透過在每個讀取的資料行上加上共享鎖,使其不可能相互衝突,從而解決幻讀問題。可以避免髒讀、不可重複讀、幻讀。

並發交易帶來的問題:

1.更新遺失:兩個事務T1和T2讀入了相同資料並修改,T2提交的結果覆蓋了T1提交的結果,導致T1的修改被遺失。

2.髒讀:事務T1修改了某一數據,並將其寫回磁盤,事務T2讀取同一數據後,T1由於某種原因被撤銷,這時T1已修改過的數據恢復原值,T2讀到的數據就與資料庫中的數據不一致,則T2讀到的數據就為「髒」數據,即不正確的數據。

3.不可重複讀取:是指在一個交易內,多次讀取相同資料。在這個事務還沒結束時,另外一個事務也存取了該相同資料。那麼,在第一個事務中的兩次讀取資料之間,由於第二個事務的修改,那麼第一個事務兩次讀到的資料可能是不一樣的。這就發生了在一個事務內兩次相同的查詢讀到的資料是不一樣的,因此稱為是不可重複讀。

4.幻讀:例如:目前薪資為5000的員工有10人,事務A讀取所有薪資為5000的人數為10人。此時,事務B插入了一則薪資也為5000的記錄。這時,事務A再次讀取薪資為5000的員工,記錄為11人。此時就產生了幻讀。

不可重複讀取和幻讀的差別? 不可重複讀取的重點是修改,幻讀的重點在於新增或刪除。

MVCC(多重版本並發控制機制):InnoDB的MVCC,是透過在每行記錄後面保存兩個隱藏的列來實現的。分別保存了行的建立時間和行的刪除時間(這裡儲存的並不是實際的時間值,而是系統版本號)。每開始一個新的事務,系統版本號就會自動遞增。事務開始時刻的系統版本號碼會作為事務的ID,用來和查詢到的每行記錄的版本號進行比較,使用MVCC後可重複讀取隔離級別下不會出現幻讀現象。

三、儲存引擎

儲存引擎是資料庫底層軟體組織,資料庫管理系統(DBMS)使用資料引擎進行建立、查詢、更新和刪除資料。

1、InnoDB(聚集索引方式)

#innodb底層儲存結構為B 樹,樹的每個節點對應innodb的一個page ,page的大小是固定的,一般設為16K。其中非葉子節點只有鍵值,葉子節點包含完整資料。

使用場景:1)經常更新的表,是和處理多重並發的更新請求;

2)支援事務安全表( ACID),支援行鎖和外鍵;

3)可以透過bin-log日誌等恢復

innodb如果沒有設定主鍵,就會自動產生一個6位元組的主鍵(使用者不可見)。

2、MyISAM(非叢集索引方式)

#MyISAM在5.1之前是MySQL的預設儲存引擎,它強調的是效能,但是它不支援事務、也不支援行鎖和外鍵,支援表鎖;當插入或更新資料時,需要鎖住整個表,效率就會低一些。只快取索引,不快取真實資料。 MyISAM讀取資料時速度很快,而且不佔用大量的記憶體和儲存資源。

MyISAM允許沒有主鍵的存在,是一種靜態索引結構。

問題:MySQL中MyISAM與InnoDB的差別?

#答案:MySQL資料庫中,最常用的兩種引擎是innodb和myisam。 InnoDB是目前MySQL的預設儲存引擎。

1)事務方面:MyISAM強調的是效能,查詢速度比InnoDB類型更快,但不支援交易。 InnoDB提供事務支援。

2)外鍵:MyISAM不支援外鍵,InnoDB支援外鍵。

3)鎖:MyISAM只支援表格級鎖,InnoDB支援行級鎖和表級鎖,預設為行級鎖,行鎖大幅提高了多用戶並發操作的性能。 innodb比較適合插入和更新作業比較多的情況,而myisam則適合頻繁查詢的情況。另外,innodb表的行鎖也不是絕對的,如果在執行一個SQL語句時,MySQL不能確定要掃描的範圍,innodb同樣會鎖全表,例如:update table set num=1 where name like "�a% "。

4)全文索引:MyISAM支援全文索引,Innodb不支援全文索引。 innodb從MySQL5.6之後提供全文索引的支援。

5)表主鍵:myisam允許沒有主鍵的表存在;innodb:如果沒有設定主鍵,就會自動產生一個6位元組的主鍵(使用者不可見)。

6)表的具體行數:myisam:select count(*) from table,myisam只要簡單的讀出保存好的行數。因為myisam內建了一個計數器,count(*)時它直接從計數器中讀取。

innodb: does not save the specific number of rows in the table. That is to say, when executing select count(*) from table, innodb will scan the entire table to calculate how many rows there are.

Recommended learning: MySQL tutorial

以上是詳解MySQL資料庫之事務及儲存引擎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

apache怎麼連接數據庫 apache怎麼連接數據庫 Apr 13, 2025 pm 01:03 PM

Apache 連接數據庫需要以下步驟:安裝數據庫驅動程序。配置 web.xml 文件以創建連接池。創建 JDBC 數據源,指定連接設置。從 Java 代碼中使用 JDBC API 訪問數據庫,包括獲取連接、創建語句、綁定參數、執行查詢或更新以及處理結果。

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

docker怎麼啟動mysql docker怎麼啟動mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

centos7如何安裝mysql centos7如何安裝mysql Apr 14, 2025 pm 08:30 PM

優雅安裝 MySQL 的關鍵在於添加 MySQL 官方倉庫。具體步驟如下:下載 MySQL 官方 GPG 密鑰,防止釣魚攻擊。添加 MySQL 倉庫文件:rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm更新 yum 倉庫緩存:yum update安裝 MySQL:yum install mysql-server啟動 MySQL 服務:systemctl start mysqld設置開機自啟動

See all articles