程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL事務處理及鎖定

MySQL事務處理及鎖定

編輯:MySQL綜合教程


MySQL事務處理及鎖定   事務處理(Transaction)是將多個更新命令作為一個整體來執行,從而保證數據整合性的機制。   www.2cto.com   存儲引擎(Storage Engine) MySQL 有一個重要特征,即:可替換存儲引擎構架(Pluggable Storage Engine Architecture) MySQL 的功能分為 2 個部分, 外層部分:負責完成與客戶端的連接、對 SQL 語句進行事前檢查等。 內層部分:存儲引擎部分,負責接收外層的數據操作指示,完成實際的數據輸入輸出以及文件操作。   MySQL 提供了多種存儲引擎,用戶可自由選擇(也可以給不同的表,選擇不同的存儲引擎) 用戶可以任意選擇存儲引擎,這是 MySQL 獨有的特征。   MyISAM :默認的高速引擎,不支持事務處理 InnoDB :支持行鎖定,以及事務處理,比 MyISAM 的處理速度稍慢 ISAM :MyISAM 引擎的前身。MySQL 5.0 以後,不再標准安裝 MERGE : 該引擎,會將多個 MyISAM 類型的表,作為一個表來處理 MEMORY, HEAP : 只在內存上保存數據 Falcon :一種新的存儲引擎,支持事務處理 ARCHIVE: 將數據壓縮後保存 (只能進行 INSERT / SELECT 操作) CSV : 以CSV 形式保存數據(應用於跨平台數據交換)   my.ini 中, 設置:default-storage-engine=INNODB 才能使用 InnoDB 引擎,來支持事務處理 [sql]  SHOW CREATE TABLE customer;   SHOW CREATE TABLE customer\G     [sql]  ALTER TABLE customer ENGINE=MyISAM;     為什麼需要事務處理? 例如:甲,向乙轉賬1 萬元。 需要2個操作,甲的賬戶減少 1萬,乙的賬戶增加 1萬。 如果,甲賬戶減少 1萬之後,乙賬戶卻沒有相應增加1萬,則發生錯誤。 為避免此類情況,將2個操作作為一個事務來處理,2個操作都成功,則事務結束,進行提交(COMMIT)。 如果 其中1個操作失敗,則強制返回最初的狀態,即:回滾(ROLLBACK) 這樣,能保證,要麼2個操作都成功,要麼2個操作都失敗。   執行ROLLBACK 等事務操作,要確保當前的數據庫引擎是支持事務操作的。如:InnoDB [sql]  BEGIN; -- 或者 START TRANSACTION   DELETE FROM customer;   SELECT * FROM customer;   ROLLBACK;     自動提交的功能,默認是開啟的。 [sql]  SELECT @@AUTOCOMMIT;   SET AUTOCOMMIT=0; --關閉自動提交功能   SELECT * FROM customer;   DELETE FROM customer;   ROLLBACK; -- 關閉自動提交,無需 BEGIN 操作,也能使用 ROLLBACK   /* 這種情況下,如果不執行 COMMIT 操作,則所有更新不會反映到數據庫中 */     部分回滾 [sql]  BEGIN;   INSERT INTO customer VALUES('T0001', '王二', '1980-10-21', 1);   SAVEPOINT sp;   INSERT INTO customer VALUES('T0002', '田三', '1985-10-21', 1);   SELECT * FROM customer;   ROLLBACK TO SAVEPOINT sp;   SELECT * FROM customer;   ROLLBACK;   SELECT * FROM customer;     以下 SQL 命令,執行後會被自動提交。它們不在事務處理的控制范圍之內。 [sql]  DROP DATABASE;   DROP TABLE;   DROP;   ALTER TABLE;     多用戶同時讀取數據庫時候,為防止沖突,可使用鎖定(Lock)、解鎖(Unlock) 鎖定分為:共享鎖定(Shared Lock)、排他鎖定(eXclusive Lock)   共享鎖定,有時也稱為,讀取鎖定。當用戶參照數據時,將對象數據變為只讀形式。 排他鎖定,也稱為,寫入鎖定 或 獨占鎖定。 在執行 INSERT、UPDATE、DELETE 等操作時,使用該鎖定。其他進程、事務,一律不能讀取、更新、寫入。   鎖定粒度:記錄(行)、表、數據庫。 鎖定提升機制:當行單位粒度的鎖定,大量產生時,數據庫將鎖定粒度自動向上提升(比如,提升成表粒度的鎖定,或者數據庫粒度的鎖定)   分離水平:事務處理之間的影響程度(同時運行時互相影響的機制) 分離水平有 4 種:  READ UNCOMMITTED :支持, 非提交讀取、不可重復讀取、幻象讀取 READ COMMITTED :支持,不可重復讀取、幻象讀取 REPEATABLE READ :支持,幻象讀取 SERIALIZABLE :都不支持 非提交讀取(髒讀 Dirty Read):能從別的事務處理中,讀取到尚未提交的更新數據,只發生在 READ UNCOMMITTED 分離水平。不推薦使用 [sql]  SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;     不可重復讀取(Non-Repeatable Read):某一事務處理中,由於其他事務處理的更新操作,導致,對同一數據的多次讀取,結果不同。 發生在 READ COMMITED 以下的分離水平   幻象讀取(Phantom Read):某一事務處理中,對同一數據進行多次讀取時,由於其他事務處理的插入、刪除操作, 使得結果中,出現了第一讀取時,不存在的數據,或者,第一次讀取時,存在的數據消失了,的現象。     死鎖(Dead Lock)兩個不同的事務處理,在相互等待對方釋放鎖定,永遠也不可能解除鎖定的一種狀態。   事務處理的機制,簡單的說,就是,留下更新日志。 與事務處理相關的日志,分為2個類型:UNDO 日志、 REDO 日志   UNDO 日志,又稱:回滾段(Rollback Segment) REDO 日志,又稱:事務處理日志、或 日志。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved