首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 事務與儲存引擎核心概念詳解

     編輯:MySQL 綜合教學

為什麼需要事務?

以銀行轉帳為例:李彥宏轉 1000 元給周鴻祎。若扣款成功但入帳失敗,資料將不一致。傳統無事務寫法:

UPDATE account SET cash = cash - 1000 WHERE id = 1;
UPDATE account SET cash = cash + 1000 WHERE id = 2;

此時必須引入事務機制,確保操作原子性。

事務四大特性 (ACID)

特性說明
原子性一組 SQL 要麼全執行,要麼全不執行
隔離性事務執行過程對其他事務不可見
持久性提交後不可撤銷,資料永久生效
一致性事務前後資料總額不變(如轉帳總金額守恆)

事務實作原理對比

  • 傳統方式:直接寫入磁碟,崩潰易導致資料損壞
  • 事務機制:先寫 Redo/Undo Log,再刷新資料頁,支援崩潰恢復與回滾

事務使用範例

START TRANSACTION;
UPDATE account SET cash = cash - 1000 WHERE id = 1;
UPDATE account SET cash = cash + 1000 WHERE id = 2;
COMMIT; -- 若出錯可 ROLLBACK

適用場景:對資料一致性要求高的業務(轉帳、下單扣庫存等)。

MySQL 儲存引擎核心差異

儲存引擎決定資料的存儲、索引、鎖定等底層行為。MySQL 以插件式架構支援多種引擎,最需掌握兩大主流:

特性MyISAMInnoDB
事務支援❌ 不支援✅ 支援 ACID
鎖粒度表級鎖行級鎖
全文索引早期支援5.6+ 支援
外鍵約束❌✅
崩潰恢復較弱Redo Log 保證
適用場景讀多寫少、全文搜尋高併發寫入、事務業務

預設引擎演進

  • MySQL 5.5 以前:MyISAM
  • MySQL 5.5 及以後:InnoDB

自訂引擎建表語法

CREATE TABLE t (...) ENGINE=MyISAM DEFAULT CHARSET=utf8;

選型建議:核心業務優先 InnoDB;唯讀分析、日誌類可考慮 MyISAM 或 ColumnStore。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved