事務:事務指邏輯上的一組操作,組成這組操作的各個單元,要么全部成功,要么全部不成功。
mysql事務: a、mysql引擎是支持事務的 b、mysql默認自動提交事務。每條語句都處在單獨的事務中。 c、手動控制事務 開啟事務:start transaction | begin 提交事務:commit 回滾事務:rollback
mysql控制事務的方法:
示例代碼如下:
package com.atswu.mysql;import java.sql.SQLException;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PReparedStatement;public class transaction { public static void main(String[] args) throws SQLException { Connection conn = null; PreparedStatement ptmt = null; try { conn = (Connection) DBUtils.getConnection(); //設置事務開始提交 conn.setAutoCommit(false); ptmt = (PreparedStatement) conn.prepareStatement("UPDATE users SET PASSWord ='456789' WHERE id = '1'"); ptmt.executeUpdate(); //事務結束之后進行事務提交 conn.commit(); } catch (Exception e) { if(conn!=null){ conn.close(); } e.printStackTrace(); } }}原子性:指事務是一個不可分割的工作單位,事務中的操作要么都發生,要么都不發生。 一致性:事務必須使數據庫從一個一致性狀態變換到另外一個一致性狀態。轉賬前和轉賬后的總金額不變。 隔離性:事務的隔離性是多個用戶并發訪問數據庫時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作數據所干擾,多個并發事務之間要相互隔離。 持久性:指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來即使數據庫發生故障也不應該對其有任何影響。
贓讀:指一個事務讀取了另一個事務未提交的數據。
不可重復讀:在一個事務內讀取表中的某一行數據,多次讀取結果不同。一個事務讀取到了另一個事務提交后的數據。(update)
虛讀(幻讀):是指在一個事務內讀取到了別的事務插入的數據,導致前后讀取不一致。 (insert)
數據庫通過設置事務的隔離級別防止以上情況的發生: * 1、READ UNCOMMITTED: 贓讀、不可重復讀、虛讀都有可能發生。 * 2、READ COMMITTED: 避免贓讀。不可重復讀、虛讀都有可能發生。(Oracle默認的) * 4、REPEATABLE READ:避免贓讀、不可重復讀。虛讀有可能發生。(mysql默認) * 8、SERIALIZABLE: 避免贓讀、不可重復讀、虛讀。 級別越高,性能越低,數據越安全
mysql中: 查看當前的事務隔離級別:SELECT @@TX_ISOLATION; 更改當前的事務隔離級別:SET TRANSACTION ISOLATION LEVEL 四個級別之一。 設置隔離級別必須在事務之前
新聞熱點
疑難解答