事务可以用以下四个关键字来定义:ACID
- 原子性(Atomicity):一个事务中所有的操作是不可分割的单元,要么全部执行成功,要么全部不执行。
- 一致性(Consistency):事务执行前后数据的状态必须是一致的。
- 隔离性(Isolation):一个事务执行时,它使用的数据不应该被其他事务所修改,以防止数据不一致。
- 持久性(Durability):一个事务完成后,对数据库所进行的修改应该永久保存下来,即使系统宕机。
在使用JDBC连接MySQL时,可以使用下面的示例代码来开启一个事务:
Connection conn = null; PreparedStatement pstmt = null; try { conn = DriverManager.getConnection(url, username, password); conn.setAutoCommit(false); //关闭自动提交 pstmt = conn.prepareStatement("UPDATE account SET balance=? WHERE id=?"); pstmt.setDouble(1, 2000); pstmt.setInt(2, 1); pstmt.executeUpdate(); pstmt = conn.prepareStatement("UPDATE account SET balance=? WHERE id=?"); pstmt.setDouble(1, 3000); pstmt.setInt(2, 2); pstmt.executeUpdate(); conn.commit(); //提交事务 } catch (SQLException e) { if (conn != null) { conn.rollback(); //回滚事务 } } finally { if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } }
在上面的代码中,首先使用setAutoCommit(false)
关闭自动提交。接着执行两个更新操作,并在最后使用commit()
提交事务。如果在执行过程中出现异常,那么就需要使用rollback()
回滚事务。在最后,需要关闭PreparedStatement和Connection对象。
总之,事务是数据库开发中非常重要的概念,可以保证数据的完整性和一致性。需要注意的是,事务要在合适的时候提交,以避免出现数据丢失或不一致等问题。