当前位置: 首页 > news >正文

事务--实操演示

目录

一、准备工作

二、在MySQL中操作事务(重点)

第一种方式:使用命令的方式

第二种方式:设置MySQL事务不默认提交的方式

三、在JDBC中操作事务(掌握)

第一种方式:使用命令的方式

第二种方式:设置MySQL事务不默认提交的方式


在这篇Mybatis---事务_mybits事务-CSDN博客 中有事务相关理论知识,在此实操演示一遍事务操作。

仍旧是以经典例子转账做演示:

一、准备工作

【win】+【R】 输入cmd;

 进到终端后输入【mysql -u root -p】然后输入密码;后续操作在这里展开演示。

输入【user】+【想要切换的数据库】 

 

输入【show tables】查看所有表

 

可以看见我这个数据库中有这么多表。

二、在MySQL中操作事务(重点)

 完成上述的准备工作后,  接下来就可以正常操作sql语句了:
e.g 先展示一下我们要演示操作的表吧!

我们将利用这个表模拟一个转账操作,其中张三给李四转1000元。下面是两种使用事务的方法的具体操作流程: 

第一种方式:使用命令的方式

开启事务

START TRANSACTION;

执行转账操作

  • 从张三账户扣除1000元

    UPDATE account SET money = money - 1000 WHERE name = '张三';
  • 给李四账户增加1000元

    UPDATE account SET money = money + 1000 WHERE name = '李四';

提交事务

  • 如果转账操作成功,提交事务

    COMMIT;
  • 如果转账操作失败,回滚事务

    ROLLBACK;
第二种方式:设置MySQL事务不默认提交的方式

查看当前事务是否默认提交

SHOW VARIABLES LIKE 'autocommit';

设置MySQL的数据库的事务不默认提交

SET autocommit = 0;

执行转账操作

  • 从张三账户扣除1000元

    UPDATE account SET money = money - 1000 WHERE name = '张三';
  • 给李四账户增加1000元

    UPDATE account SET money = money + 1000 WHERE name = '李四';

手动提交或回滚事务

  • 如果转账操作成功,提交事务

    COMMIT;
  • 如果转账操作失败,回滚事务

    ROLLBACK;

恢复默认提交设置(可选)

SET autocommit = 1;

上面两种情况下,一旦有操作不成功的情况,就可以输入ROLLBACK;回滚到转帐前。

三、在JDBC中操作事务(掌握)

第一种方式:使用命令的方式
import java.sql.*;public class TransactionExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/yourdatabase";String user = "yourusername";String password = "yourpassword";try (Connection conn = DriverManager.getConnection(url, user, password)) {// 开启事务conn.setAutoCommit(false);try {// 从张三账户扣除1000元String sql1 = "UPDATE account SET money = money - 1000 WHERE name = '张三'";try (Statement stmt = conn.createStatement()) {stmt.executeUpdate(sql1);}// 给李四账户增加1000元String sql2 = "UPDATE account SET money = money + 1000 WHERE name = '李四'";try (Statement stmt = conn.createStatement()) {stmt.executeUpdate(sql2);}// 提交事务conn.commit();System.out.println("转账成功!");} catch (SQLException e) {// 回滚事务conn.rollback();System.out.println("转账失败,已回滚!");e.printStackTrace();} finally {// 关闭连接conn.close();}} catch (SQLException e) {e.printStackTrace();}}
}
第二种方式:设置MySQL事务不默认提交的方式
import java.sql.*;public class TransactionExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/yourdatabase";String user = "yourusername";String password = "yourpassword";try (Connection conn = DriverManager.getConnection(url, user, password)) {// 设置不默认提交conn.setAutoCommit(false);try {// 从张三账户扣除1000元String sql1 = "UPDATE account SET money = money - 1000 WHERE name = '张三'";try (Statement stmt = conn.createStatement()) {stmt.executeUpdate(sql1);}// 给李四账户增加1000元String sql2 = "UPDATE account SET money = money + 1000 WHERE name = '李四'";try (Statement stmt = conn.createStatement()) {stmt.executeUpdate(sql2);}// 提交事务conn.commit();System.out.println("转账成功!");} catch (SQLException e) {// 回滚事务conn.rollback();System.out.println("转账失败,已回滚!");e.printStackTrace();} finally {// 恢复默认提交设置conn.setAutoCommit(true);// 关闭连接conn.close();}} catch (SQLException e) {e.printStackTrace();}}
}

【注:yourdatabaseyourusernameyourpassword对应实际数据库名称、用户名和密码,必要时请更改成自己对应的。】

http://www.lryc.cn/news/539908.html

相关文章:

  • PHP是如何并行异步处理HTTP请求的?
  • 【Spring详解一】Spring整体架构和环境搭建
  • 在 Vue 3 中使用 Lottie 动画:实现一个加载动画
  • 深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作
  • MySQL 主从复制原理及其工作过程
  • 计算机网络抄手 运输层
  • 字符串函数和结构题内存对齐
  • 【嵌入式Linux应用开发基础】特殊进程
  • 深度学习pytorch之19种优化算法(optimizer)解析
  • rust笔记5-derive属性2
  • DeepSeek、微信、硅基流动、纳米搜索、秘塔搜索……十种不同方法实现DeepSeek使用自由
  • 介绍cherrypick
  • HTTP、HTTPS区别可靠性及POST为什么比GET安全的探讨
  • 从零到一:Spring Boot 与 RocketMQ 的完美集成指南
  • AIGC:开启内容创作新纪元,我们如何看待它的影响与前景?
  • 10分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
  • mac安装Pyspark并连接Mysql
  • 深入理解Python多进程编程 multiprocessing
  • jQuery AJAX 方法详解
  • 青少年编程都有哪些比赛可以参加
  • sql server 数据库 锁教程及锁操作
  • 存储结构 分类
  • VSCode 中 Git 添加了多个远端,如何设置默认远端
  • 项目中一些不理解的问题
  • vue3 + thinkphp 接入 七牛云 DeepSeek-R1/V3 流式调用和非流式调用
  • Linux应用之构建命令行解释器(bash进程)
  • php 系统命令执行及绕过
  • 保护大数据的最佳实践方案
  • 在高流量下保持WordPress网站的稳定和高效运行
  • Redis7——基础篇(二)