詳解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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

Oracle不僅是數據庫公司,還是雲計算和ERP系統的領導者。 1.Oracle提供從數據庫到雲服務和ERP系統的全面解決方案。 2.OracleCloud挑戰AWS和Azure,提供IaaS、PaaS和SaaS服務。 3.Oracle的ERP系統如E-BusinessSuite和FusionApplications幫助企業優化運營。

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。
