事務處理在各類管理系統中都有着普遍的應用,好比人員管理系統,不少同步數據庫操做大都須要用到事務處理。好比說,在人員管理系統中,你刪除一我的員,你即須要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操做語句就構成一個事務!
刪除的SQL語句
delete from userinfo where ~~~
delete from mail where ~~
delete from article where~~
~~
若是沒有事務處理,在你刪除的過程當中,假設出錯了,只執行了第一句,那麼其後果是不可思議的!
但用事務處理。若是刪除出錯,你只要rollback就能夠取消刪除操做(實際上是隻要你沒有commit你就沒有確實的執行該刪除操做)
通常來講,在商務級的應用中,都必須考慮事務處理的!
mysql事務處理的意義
事務處理機制在程序開發過程當中有着很是重要的做用,它可使整個系統更加安全,例如在銀行處理轉帳業務時,若是A帳戶中的金額剛被髮出,而B帳戶還沒來得及接收就發生停電,這會給銀行和我的帶來很大的經濟損失。採用事務處理機制,一旦在轉帳過程當中發生意外,則程序將回滾,不作任何處理。
MYSQL的事務處理主要有兩種方法
1.用begin,rollback,commit來實現
begin開始一個事務
rollback事務回滾
commit 事務確認
2.直接用set來改變mysql的自動提交模式
mysql默認是自動提交的,也就是你提交一個query,就直接執行!能夠經過
set autocommit = 0 禁止自動提交
set autocommit = 1 開啓自動提交
來實現事務的處理。
但要注意當用set autocommit = 0 的時候,你之後全部的sql都將做爲事務處理,直到你用commit確認或 rollback結束,注意當你結束這個事務的同時也開啓了新的事務!按第一種方法只將當前的作爲一個事務!
MYSQL只有 INNODB和BDB類型的數據表才支持事務處理,其餘的類型是不支持的!
MYSQL5.0 WINXP下測試經過~ ^_^
mysql> use test;
Database changed
mysql> CREATE TABLE `dbtest`(
-> id int(4)
-> ) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> select * from dbtest
-> ;
Empty set (0.01 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dbtest values(5);
Query OK, 1 row affected (0.00 sec)
mysql> insert into dbtest value(6);
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dbtest values(7);
Query OK, 1 row affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00 sec)
安全