標籤:持久性 系統 出現 應用程式 sel 使用 修改 持久 llb
要點一中介紹過了事務的基本知識,那麼,在MySQL中又是如何處理事務的呢?
事務是由一組SQL語句構成的,它由一個使用者輸入時,並以修改成持久的或者滾到原來狀態而終結。在MySQL中,在一個會話開始時,系統變數AUTOCOMMIT值為1,即自動認可功能是開啟的,當使用者每執行一條SQL語句後,該語句對資料庫的修改就立即被提交成持久性修改儲存到磁碟上,一個事務也就結束了。因此,使用者必須關閉自動認可,事務才能由多條SQL語句組成。使用如下語句:
SET @@AUTOCOMMIT=0;
執行此語句後,必須明確地指示每個事務的終止,事務中的SQL語句對資料庫所做的修改才能成為持久化修改。
例:執行如下語句:
delete from student where 學號=‘3160707001’
select * from student;
從執行結果中發現,表中已經刪去了一行。但是這個修改並沒有持久化,因為自動認可已經關閉了。使用者可以通過ROLLBACK撤銷這一修改,或者使用COMMIT語句持久化這一修改。
下面將具體介紹如何處理一個事務:
1.開始事務
當一個應用程式的第一條SQL語句或者在COMMIT或ROLLBACK語句後面的第一條SQL執行後,一個新的事務也就開始了。另外還可以使用一條START TRANSACTION語句來顯式地啟動一個事務。
文法格式:START TRANSACTION | BEGIN WORK
一條BEGIN WORK語句可以用來替代START TRANSACTION語句,但是START TRANSACTION更常用一些。
2.結束事務
COMMIT語句是提交語句,它使得自從事務開始以來所執行的所有資料修改成為資料庫的永久部分,也標誌著一個事務的結束,其文法格式為:
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
3.撤銷事務
ROLLBACK是撤銷語句,它撤銷事務所做的修改,並結束當前這個事務。文法格式:、
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
在前面的舉例中,若在最後加上以下這條語句
rollback work;
執行完這條語句後,前面的刪除動作將被撤銷,可用select語句查詢該行資料是否還原。
4.復原事務
除了撤銷整個事務,使用者還可以使用ROLLBACK TO語句使交易回復到某個點,在這之前需要用SAVEPOINT語句來設定一個儲存點。
SAVEPOINT文法格式:
SAVEPOINT identifier
其中identifier為儲存點的名稱。
ROLLBACK TO SAVEPOINT語句會向已命名的儲存點復原一個事務。如果在儲存點被設定後,當前事務對資料進行了更改,則這些更改會在復原中被撤銷,其文法格式:
ROLLBACK [WORK] TO SAVEPOINT identifier
當交易回復到某個儲存點後,在該儲存點之後設定的儲存點將被刪除。
RELEASE SAVEPOINT語句會從當前事務的一組儲存點中刪除已命名的儲存點。不出現提交或復原。如果儲存點不存在,會出現錯誤。其文法格式為:
RELEASE SAVEPOINT identifier
MySQL事務知識要點(二)