程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL事務,mysql事務處理

MySQL事務,mysql事務處理

編輯:MySQL綜合教程

MySQL事務,mysql事務處理


事務指邏輯上的一組操作,組成這組操作的各個單元,要麼全成功,要麼全不成功。

  • MySQL中的事務

a,mysql引擎是支持事務的

b,mysql默認自動提交事務。每條語句都處在單獨的事務中。

c,手動控制事務

  開啟事務:begin;

  提交事務:commit;

  回滾事務:rollback;

  • JDBC控制事務

Connection conn=null;
PreparedStatement ps=null;
try{
  conn=DBUtil.getConnection();
  conn.setAutoCommit(false);//相當於begin
  ps=conn.prepareStatement("update account set money=money-100 where id=1");
  ps.executeUpdate();
  int i=1/0;//測試如果中途出現異常,第一條sql會不會執行
  ps=conn.prepareStatement("update account set money=money+100 where id=2");
  ps.executeUpdate();
  conn.commit(); }catch(Exception e){   if(conn!=null){     conn.rollback();   } }
  • 事務的特性

原子性:指事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。 

一致性:事務必須使數據庫從一個一致性狀態變換到另外一個一致性狀態。轉賬前和轉賬後的總金額不變。

隔離性:事務的隔離性是多個用戶並發訪問數據庫時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作數據所干擾,多個並發事務之間要相互隔離。

持久性:指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來即使數據庫發生故障也不應該對其有任何影響。

  • 事務的隔離級別

贓讀:指一個事務讀取了另一個事務未提交的數據。

不可重復讀:在一個事務內讀取表中的某一行數據,多次讀取結果不同。一個事務讀取到了另一個事務提交後的數據。(update)

虛讀(幻讀):是指在一個事務內讀取到了別的事務插入的數據,導致前後讀取不一致。 (insert)

 

數據庫通過設置事務的隔離級別防止以上情況的發生:

* 1、READ UNCOMMITTED: 贓讀、不可重復讀、虛讀都有可能發生。

* 2、READ COMMITTED: 避免贓讀。不可重復讀、虛讀都有可能發生。(oracle默認的)

* 4、REPEATABLE READ:避免贓讀、不可重復讀。虛讀有可能發生。(mysql默認)

* 8、SERIALIZABLE: 避免贓讀、不可重復讀、虛讀。

級別越高,性能越低,數據越安全

 

mysql中:

查看當前的事務隔離級別:SELECT @@TX_ISOLATION;

更改當前的事務隔離級別:SET TRANSACTION ISOLATION LEVEL 四個級別之一。

設置隔離級別必須在事務之前。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved