MySQL事物是指一組被視為單個(gè)邏輯單元的SQL語(yǔ)句,這些語(yǔ)句組成了一個(gè)邏輯上的操作,需要整體執(zhí)行,如果其中任何一條語(yǔ)句出錯(cuò),整個(gè)操作都必須回滾,這就是事物的基本特性。
使用Java語(yǔ)言操作MySQL事物非常方便,我們可以使用JDBC(Java數(shù)據(jù)庫(kù)連接)來(lái)實(shí)現(xiàn)。以下是一個(gè)使用JDBC實(shí)現(xiàn)MySQL事物的示例代碼:
Connection conn = null; try { conn = DBUtil.getConnection(); conn.setAutoCommit(false); // 關(guān)閉自動(dòng)提交 Statement stmt = conn.createStatement(); String sql1 = "update account set money = money - 100 where id = 1"; // 扣除用戶1的100元 String sql2 = "update account set money = money + 100 where id = 2"; // 給用戶2加100元 stmt.executeUpdate(sql1); stmt.executeUpdate(sql2); conn.commit(); // 提交事物 } catch(SQLException e) { e.printStackTrace(); conn.rollback(); // 回滾事物 } finally { DBUtil.closeConnection(conn); }
在這個(gè)例子中,我們首先使用JDBC獲取到一個(gè)數(shù)據(jù)庫(kù)連接,然后將其設(shè)置為手動(dòng)提交(即關(guān)閉自動(dòng)提交)。接著,我們創(chuàng)建了兩條SQL語(yǔ)句,執(zhí)行了一個(gè)更新操作,扣除了用戶1的100元并將這筆錢轉(zhuǎn)移給了用戶2。在整個(gè)操作過(guò)程中,如果有任何SQL語(yǔ)句執(zhí)行錯(cuò)誤,那么這個(gè)事物將會(huì)被自動(dòng)回滾,恢復(fù)到執(zhí)行事物之前的狀態(tài)。如果操作都執(zhí)行成功,那么調(diào)用conn.commit()方法就可以將事物提交。