mysql 基礎操作筆記之一MYSQL的交易處理功能

來源:互聯網
上載者:User

一、MYSQL 的交易處理機制

  參考博文 : MYSQL的交易處理功能   深入淺出mysql交易處理和鎖機制    MySQL交易處理和鎖定語句

 

  簡單介紹一下事務:

  事務一般要滿足4個條件:

    原子性:事務在執行時,要做到“要麼全做,要麼不做”。也就是說不允許事務部分執行。即使因為故障而使事務不能完成,在rollback時也要消除對資料庫的影響。

    一致性: 事務的操作應該使資料庫從一個一致性的狀態變到另一個一致性的狀態。例如網上購物,只有既讓商品出庫,又讓商品進入客戶的購物籃才能構成事務。

    隔離性: 如果多個事務並發執行,應像各個事務獨立執行一樣。

    持久性: 一個成功執行的事務對資料庫的作用是持久的,即使資料庫因故障出錯,也應該能夠恢複。

  (PS)MYSQL 中只有 InnoDB 和 BDB 類型才能支援交易處理,其他類型不支援。

  mysql 的交易處理機制主要有兩種:

  第一種是:以 BEGIN , ROLLBACK, COMMIT 來實現。建議使用這種方法來處理。

  step1:BEGIN 開始一個事務

  step2:執行mysql 語句,檢測是否執行成功。

  step3:檢測失敗就執行 ROLLBACK ,進行交易回復

  step4:按照事務需求,重複運行step2,3。

  step5:COMMIT 事務確認。

// 下面代碼在mysql控制台上測試回合過,沒問題
mysql> use test;Database changedmysql> 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 value(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)mysql>
/** *  下面代碼是在php上的類似實現 */$handler=mysql_connect("localhost","root","");mysql_select_db("task");mysql_query("BEGIN");//開始事務定義mysql_query('START TRANSACTION');if(!mysql_query("insert into trans (id) values('2')")){mysql_query("ROOLBACK");//判斷當執行失敗時復原}if(!mysql_query("insert into trans (id) values('4')")){mysql_query("ROOLBACK");//判斷執行失敗復原}mysql_query("COMMIT");//執行事務mysql_close($handler);

 

 

 

  第二種是直接用 SET 來改變mysql 的自動認可模式

  mysql 是預設自動認可的,即我們提交一個query,它就直接執行。我們可以通過

  SET AUTOCOMMIT = 0 ;   禁止自動認可

  SET AUTOCOMMIT = 1 ;   開啟自動認可

  來實現交易處理。

  要注意的是: 用 set autocommit=0 的時候,你以後所有的SQL都將做為事務處理,直到你用commit確認或rollback結束,注意當你結束這個事務的同時也開啟了個新的事務!按第一種方法只將當前的作為一個事務!所以推薦用第一種方法。

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.