首頁  >  文章  >  資料庫  >  mysql中什麼是事務處理

mysql中什麼是事務處理

青灯夜游
青灯夜游原創
2022-11-11 17:32:102468瀏覽

在mysql中,事務處理是一種機制,用來管理必須成批執行的MySQL操作,以確保資料庫不包含不完整的操作結果;事務處理可以用來維護資料庫的完整性,可保證成批的MySQL操作不會中途停止,它們要麼完全執行,要麼完全不執行。

mysql中什麼是事務處理

本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。

事務處理

        事務處理(transaction processing)#可用來維護資料庫的完整性,它保證成批的MySQL操作要么完全執行,要么完全不執行。

        例如,在人員管理系統中,刪除一個人員,既需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些資料庫操作語句就構成一個事務! 

        事務處理是一種機制,用來管理必須以批次執行的MySQL作業,以確保資料庫不包含不完整的作業結果。 利用事務處理,可以保證一組操作不會中途停止,它們或作為整體執行,或完全不執行(除非明確指示)。如果沒有錯誤發生,整組語句提交給(寫到)資料庫表。如果發生錯誤,則進行回退(撤銷)以還原資料庫到某個已知且安全的狀態。

        一般來說,事務是必須滿足4個條件(ACID)::原子性Atomicity,或稱為不可分割性)、一致性Consistency)、隔離性Isolation,又稱獨立性)、持久性Durability)。

  • 原子性:一個交易(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

  • 一致性:在交易開始前和交易結束後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。

  • 隔離性:資料庫允許多個並發交易同時對其資料進行讀寫和修改的能力,隔離性可以防止多個交易並發執行時由於交叉執行而導致資料的不一致。交易隔離分為不同級別,包括讀取未提交(Read uncommitted)、讀取提交(read committed)、可重複讀取(repeatable read)和串行化(Serializable)。

  • 持久性:交易處理結束後,資料的修改就是永久的,即使係統故障也不會遺失。

1.1 關鍵字

#在使用事務和事務處理時,有幾個關鍵字彙反覆出現。以下是關於事務處理需要知道的幾個術語:

  • #事務(transaction):指一組SQL語句;
  • ##回退( rollback):指撤銷指定SQL語句的程序;
  • #提交(commit):指將未儲存的SQL語句結果寫入資料庫表;
  • 保留點(savepoint):指在事務處理中設定的臨時佔位符(place- holder),你可以對它發布回退(與回退整個事務處理不同) 。

1.2 事務控制語句

       

 管理事務處理的關鍵在於將SQL語句組分解為邏輯區塊並明確規定資料何時應該回退,何時不應該回退。 

1.2.1 START  TRANSACTION 開始交易

        
START  TRANSACTION

1.2.2  COMMIT 

#         為一般的MySQL語句都是直接針對資料庫表執行、所寫的。這就是所謂的隱含提交(implicit commit),即提交(寫入或儲存)操作是自動進行的。 
        但是,以在事務處理區塊中,提交不會隱含地進行。為進行明確的提交,使用COMMIT語句COMMIT會提交事務,並使已對資料庫進行的所有修改成為永久性的;如下:

START TRANSACTION  
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT;

        在本範例中,從系統中完全刪除訂單20010。因為涉及更新兩個資料庫表orders和orderItems,所以使用事務處理區塊來確保訂單不會被部分刪除。 最後的COMMIT語句僅在不出錯時寫出變更。如果第一條DELETE起作用,但第二條失敗,則DELETE不會提交(實際上,它是自動撤銷的)。

1.2.3 ROLLBACK

        MySQL的ROLLBACK指令用來回退(撤銷)MySQL語句#如下: 

SELECT * FROM orderitems;
START TRANSACTION        -- 事务开始
DELETE FROM orderitems;
SELECT * FROM orderitems;
ROLLBACK;
SELECT * FROM orderitems;

        上例從顯示ordertotals表格的內容開始。首先執行一條SELECT以顯示該表不為空。然後開始一
事務處理用一條DELETE語句刪除ordertotals中的所有行。 另一條SELECT語句驗證ordertotals確實為空。 這時用一條ROLLBACK語句回退START TRANSACTION之後的所有語句,最後一個SELECT語句顯示該表不為空。 
        已明顯,ROLLBACK只能在一個事務處理內使用(在執行一個START TRANSACTION指令之後)

交易處理用來管理INSERT、UPDATE和DELETE語句。你不能回退SELECT語句。 (這樣做也沒有什麼意義。)你不能回退CREATE或DROP操作。事務處理區塊中可以使用這兩個語句,但如果你執行回退,它們不會被撤銷。

1.2.4 保留點

        簡單的ROLLBACK與COMMIT語句可以寫入或撤銷整個事務處理。但是,只是對簡單的事務處理才能這樣做,更複雜的事務處理可能需要部分提交或回退。 

        為了支援回退部分事務處理,必須能在事務處理區塊中適當的位置放置佔位符。這樣,如果需要回退,可以回退到某個佔位符。 這些佔位符稱為保留點為了建立佔位符,可用如下SAVEPOINT語句: 

SAVEPOINT delete1;

        每個保留點都取標識它的唯一名字,以便在回退時,MyMySQL知道要回退到何處。 如下操作可以回退到給定的保留點:

ROLLBACK TO delete1;

1.2.5 更改預設的提交行為

        如上所述,預設的MySQL行為是自動提交所有變更。換句話說,任何時候你執行一條MySQL語句,該語句其實都是針對表格執行的,而且所做的變更立即生效。為指示MySQL不自動提交更改,需要使用以下語句:

SET autocommit = 0;

        autocommit標誌決定是否自動提交更改

###########################也都沒有COMMIT語句。設定autocommit為0(假)指示MySQL不自動提交變更(直到autocommit被設定為真為止)。 ############標誌為連接 ###專用 autocommit標誌是針對每個連接而不是伺服器的。 ###############1.3 事務處理方式############      ### ### MYSQL 交易處理主要有兩種方法:   ####### MYSQL 交易處理主要有兩種方法:   ###### #####用BEGIN, ROLLBACK, COMMIT來實現 #########           1)###BEGIN### 開始一個事務######     #   ## 回滾######           3)###COMMIT### 事務確認 #######範例:###
START TRANSACTION; -- 开始事务
INSERT INTO runoob_transaction_test VALUE(5);
INSERT INTO runoob_transaction_test VALUE(6);
COMMIT; -- 提交事务

select * from runoob_transaction_test;
#########
  • 直接用SET 來改變MySQL 的自動提交模式:

           SET AUTOCOMMIT=0 禁止自動提交 

           SET AUTOCOMMIT=1 開啟自動提交

【相關推薦:mysql影片教學

以上是mysql中什麼是事務處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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