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

MySQL 事務與鎖機制入門:ACID 特性、隔離等級、死鎖排查

     編輯:MySQL 綜合教學

儲存引擎鎖粒度對比

引擎鎖粒度特點
MyISAM表鎖鎖定整張表,讀寫互斥,並發極低
MEMORY表鎖同 MyISAM
BDB頁鎖已淘汰
InnoDB行鎖支援事務、高並發、MVCC

表鎖手動控制

-- 唯讀鎖
LOCK TABLES tbl_name READ;
SELECT * FROM tbl_name;
UNLOCK TABLES;

-- 讀寫鎖
LOCK TABLES tbl_name WRITE;
INSERT/UPDATE/DELETE ...
UNLOCK TABLES;

注意:持有表鎖期間開啟事務會隱式釋放鎖,慎用。

事務基礎語法

-- 開啟事務
START TRANSACTION;  -- 或 BEGIN

-- 寫入操作
INSERT ...; UPDATE ...; DELETE ...;

-- 提交
COMMIT;

-- 回滾
ROLLBACK;

ACID 四大特性

  • Atomicity 原子性:全部成功或全部失敗。
  • Consistency 一致性:資料從一個一致狀態轉移到另一個一致狀態。
  • Isolation 隔離性:並發事務互不干擾。
  • Durability 持久性:提交後永久生效,掉電不丟。

隔離等級與現象

InnoDB 透過 MVCC (多版本並發控制) 在 REPEATABLE READ 下解決大部分幻讀。

隱式提交場景

DDL (CREATE, DROP, ALTER)、TRUNCATE、LOCK TABLES、啟動新事務會隱式提交當前事務。

死鎖排查

  1. SHOW ENGINE INNODB STATUS\G 查看 LATEST DETECTED DEADLOCK 區塊。
  2. 確保多事務以**相同順序**存取表/行。
  3. 縮短事務持有時間,避免長事務。
  4. 必要時鎖升級:SELECT ... FOR UPDATE 主動加排他鎖。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
隔離等級髒讀不可重複讀幻讀InnoDB 預設
READ UNCOMMITTEDYYY
READ COMMITTEDNYY
REPEATABLE READNNY✓
SERIALIZABLENNN