2025-04-23

MYSQL入門學習之十五:事務處理的基本操作

 

相關鏈接:

MYSQL入門學習之一:基本操作

/database/201212/173868.html

MYSQL入門學習之二:使用正則表達式搜尋

/database/201212/173869.html

MYSQL入門學習之三:全文本搜尋

/database/201212/173873.html

MYSQL入門學習之四:MYSQL的數據類型

/database/201212/175536.html

MYSQL入門學習之五:MYSQL的字符集

/database/201212/175541.html

MYSQL入門學習之六:MYSQL的運算符

/database/201212/175862.html

MYSQL入門學習之七:MYSQL常用函數

/database/201212/175864.html

MYSQL入門學習之八:資料庫及表的基本操作

/database/201212/175867.html

MYSQL入門學習之九:索引的簡單操作

/database/201212/176772.html

MYSQL入門學習之十:視圖的基本操作

/database/201212/176775.html

MYSQL入門學習之十一:觸發器的基本操作

/database/201212/176781.html

MYSQL入門學習之十二:存儲過程的基本操作

/database/201212/177380.html

MYSQL入門學習之十三:自設定函數的基本操作

/database/201212/177382.html

MYSQL入門學習之十四:遊標的基本操作

/database/201212/177384.html

 

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

        但是並非所有的資料庫引擎都支持事務處理。MyISAM和InnoDB是兩種最常使用的引擎。前者不支持明確的事務處理管理,而後者支持。

一、幾個事務處理相關的術語

        事務(transaction)指一組SQL語句;

        回退(rollback)指撤銷指定SQL語句的過程;

        提交(commit)指將未存儲的SQL語句結果寫入資料庫表;

        保留點(savepoint)指事務處理中設置的臨時占位符(placeholder),可以對它發佈回退(與回退整個事務處理不同)。

 

二、控制事務處理

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

1、開始事務

        START TRANSACTION;

        使用如上語句標識事務的開始;

2、使用ROLLBACK

        ROLLBACK命令用來回退(撤銷)MySQL語句:

        下面的示例操作,首先開始一個事務,然後刪除瞭表test_inn中的所有內容,並查看表中的內容,顯示表已被清空。但執行ROLLBACK回退事務後,重新查詢表中的數據。表中的數據依然還在:

[sql] 

mysql> start transaction;  

mysql> delete from test_inn;  

mysql> select * from test_inn;  

Empty set (0.00 sec)  

mysql> rollback;  

mysql> select * from test_inn;  

+——+————+  

| id   | birthday   |  

+——+————+  

|    1 | 2012-12-12 |  

|    1 | 0000-00-00 |  

|    1 | 2012-12-00 |  

|    1 | 0000-00-00 |  

+——+————+  

mysql> show create table test_inn;  

+———-+—————————-  

| Table    | Create Table  

+———-+—————————-  

| test_inn | CREATE TABLE `test_inn` (  

  `id` int(11) DEFAULT NULL,  

  `birthday` date DEFAULT NULL  

) ENGINE=InnoDB DEFAULT CHARSET=latin1 |  

+———-+—————————-  

        註意:上例中表test_inn使用的是InnoDB引擎,若一個使用MyISAM引擎的表執行如上操作,則即使ROLLBACK後,可以發現,數據仍然被實實在在的清空。

3、使用COMMIT

        一般的MySQL語句都是隱含提交(implicit commit)的,即提交(寫或保存)操作是自動進行的。

        但是,在事務處理塊中,提交不會隱含進行。為進行明確的提交,需要使用COMMIT語句。

        示例:

[sql] 

mysql> start transaction;  

mysql> delete from test_inn;  

mysql> commit;  

        當COMMIT或ROLLBACK語句執行後,啟動的事務會自動關閉。
 

4、使用保留點

        為瞭支持回退部分事務處理,必須在事務處理塊中合適的位置放置保留點。

        創建保留點:SAVEPOINT sap_name;

        回退至保留點:ROLLBACK TO sap_name;

        釋放保留點:RELEASE sp_name;

        保留點也可以在事務處理完成(執行一條ROLLBACK或COMMIT)後自動釋放。

5、更改默認的提交行為

        SET autocommit=0;

        autocommit標志是針對每個連接而不是伺服器的。

參考:《MySQL必知必會》
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *