1.事务(Transaction)的概念 2.MySQL数据库中操作事务命令 2.1.编写测试SQL脚本,如下: 2.2.开启事务(start transaction) 2.3.提交事务(commit) 2.4回滚事务(rollback) 3.JDBC中使用事务 3.1.JDBC使用事务范例 3.2设置事务回滚点 1.事务(Transaction)的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。 举例:需求:把大象放入冰箱 1.打开冰箱门 2.放入大象 3.关闭冰箱门 例如:A——>B转帐,对应于如下两条sql语句 update from account set money=money+100 where name='B'; update from account set money=money-100 where name='A'; 事务:执行的业务在逻辑上是一个整体,要么全部成功,要么全部失败! 转账案例 张三 ------> 520 ----> 女朋友! 2.MySQL数据库中操作事务命令 ### JDBC专题(五)-JDBC专题-JDBC事务 #### 一、事务(Transaction)的概念 事务在计算机科学领域,特别是数据库管理中,是一个重要的概念。它指的是由一系列操作组成的逻辑单元,这些操作要么全部成功,要么全部失败。事务的这一特性确保了数据的一致性和完整性。 举例来说,将大象放入冰箱的操作可以被视为一个事务,包含以下步骤: 1. **打开冰箱门**; 2. **放入大象**; 3. **关闭冰箱门**。 如果在执行过程中任何一个步骤失败,则整个过程应该被视为失败,即所有已经完成的操作应被撤销。同样的逻辑也适用于数据库中的事务处理,例如转账操作: - 更新账户B的余额(增加100元); - 更新账户A的余额(减少100元)。 在这个例子中,如果其中一个更新失败,那么另一个更新也应该被撤销,以保持数据的一致性。这就是事务的核心思想。 #### 二、MySQL数据库中操作事务命令 在MySQL数据库中,可以通过以下命令来控制事务的开启、提交和回滚: 1. **开启事务**(`START TRANSACTION`):此命令用于开始一个新的事务。在事务开始之前,任何更改都不会被保存到数据库中。 - 例如:`START TRANSACTION;` 2. **提交事务**(`COMMIT`):提交事务意味着事务中的所有更改都将被永久保存到数据库中。 - 例如:`COMMIT;` 3. **回滚事务**(`ROLLBACK`):回滚事务会撤销自上次提交或事务开始以来的所有更改,将数据恢复到事务开始前的状态。 - 例如:`ROLLBACK;` 下面通过一个具体的示例来演示如何在MySQL数据库中使用这些命令。 ##### 示例:A→B转账 假设有一个名为`account`的表,其中包含三个账户A、B、C,每个账户的初始金额为1000元。 - 创建表: ```sql CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(40), money FLOAT ); ``` - 插入测试数据: ```sql INSERT INTO account (name, money) VALUES ('A', 1000); INSERT INTO account (name, money) VALUES ('B', 1000); INSERT INTO account (name, money) VALUES ('C', 1000); ``` 接下来模拟一个转账失败的场景: - 开启事务: ```sql START TRANSACTION; ``` - 更新A账户减少100元,但未提交事务: ```sql UPDATE account SET money = money - 100 WHERE name = 'A'; ``` 此时关闭DOS窗口,由于未提交事务,A账户的金额将恢复到原始状态,即1000元。 模拟转账成功的场景: - 开启事务: ```sql START TRANSACTION; ``` - 更新A账户减少100元: ```sql UPDATE account SET money = money - 100 WHERE name = 'A'; ``` - 更新B账户增加100元: ```sql UPDATE account SET money = money + 100 WHERE name = 'B'; ``` - 提交事务: ```sql COMMIT; ``` 现在,转账操作被视为成功完成,A账户的金额减少了100元,而B账户的金额增加了100元。 #### 三、JDBC中使用事务 在Java中使用JDBC与数据库进行交互时,可以通过设置连接的`autoCommit`属性来控制事务的开启和提交。 1. **开启事务**: ```java conn.setAutoCommit(false); // 关闭自动提交 ``` 2. **提交事务**: ```java conn.commit(); // 提交事务 ``` 3. **回滚事务**: ```java conn.rollback(); // 回滚事务 ``` 如果在执行过程中发生异常,还可以通过捕捉异常的方式自动回滚事务。 下面是一个使用JDBC实现转账操作的示例: ```java public static void main(String[] args) { Connection conn = null; PreparedStatement st = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://192.168.132.128:3306/employeesdb"); conn.setAutoCommit(false); // 开启事务 st = conn.prepareStatement("UPDATE account SET money = money - 100 WHERE name = ?"); st.setString(1, "A"); st.executeUpdate(); st = conn.prepareStatement("UPDATE account SET money = money + 100 WHERE name = ?"); st.setString(1, "B"); st.executeUpdate(); conn.commit(); // 提交事务 } catch (Exception e) { if (conn != null) { try { conn.rollback(); // 回滚事务 } catch (SQLException ex) { ex.printStackTrace(); } } e.printStackTrace(); } finally { // 关闭资源 if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } ``` 该示例展示了如何使用JDBC控制事务,确保转账操作在一个事务中执行。如果转账操作成功,则提交事务;如果出现异常,则回滚事务,以保证数据的一致性和完整性。
- 粉丝: 5882
- 资源: 173
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助