您好,登錄后才能下訂單哦!
這篇文章主要介紹了mysql事務處理指的是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇mysql事務處理指的是什么文章都會有所收獲,下面我們一起來看看吧。
在mysql中,事務處理是一種機制,用來管理必須成批執行的MySQL操作,以保證數據庫不包含不完整的操作結果;事務處理可以用來維護數據庫的完整性,可保證成批的MySQL操作不會中途停止,它們要么完全執行,要么完全不執行。
事務處理(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語句組分解為邏輯塊,并明確規定數據何時應該回退,何時不應該回退。
MySQL使用下面的語句來標識事務的開始:
START TRANSACTION
一般的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不會提交(實際上,它是被自動撤銷的)。
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操作。事務處理塊中可以使用這兩條語句,但如果你執行回退,它們不會被撤銷。
簡單的ROLLBACK和COMMIT語句就可以寫入或撤銷整個事務處理。但是,只是對簡單的事務處理才能這樣做,更復雜的事務處理可能需要部分提交或回退。
為了支持回退部分事務處理,必須能在事務處理塊中合適的位置放置占位符。這樣,如果需要回退,可以回退到某個占位符。這些占位符稱為保留點。為了創建占位符,可使用如下SAVEPOINT語句:
SAVEPOINT delete1;
每個保留點都取標識它的唯一名字,以便在回退時,MySQL知道要回退到何處。如下操作可以回退到給出的保留點:
ROLLBACK TO delete1;
正如所述,默認的MySQL行為是自動提交所有更改。換句話說,任何時候你執行一條MySQL語句,該語句實際上都是針對表執行的,而且所做的更改立即生效。為指示MySQL不自動提交更改,需要使用以下語句:
SET autocommit = 0;
autocommit標志決定是否自動提交更改,不管有沒有COMMIT語句。設置autocommit為0(假)指示MySQL不自動提交更改(直到autocommit被設置為真為止)。
標志為連接 專用 autocommit標志是針對每個連接而不是服務器的。
1.3 事務處理方式
MYSQL 事務處理主要有兩種方法:
用 BEGIN, ROLLBACK, COMMIT來實現
1)BEGIN 開始一個事務
2)ROLLBACK 事務回滾
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事務處理指的是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。