1. 程式人生 > >MySQL事務知識要點(二)

MySQL事務知識要點(二)

行數 永久 action 是否 刪除 沒有 body chain comm

要點一中介紹過了事務的基本知識,那麽,在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事務知識要點(二)