jdbc 对事务的支持

news2025/4/7 20:26:15

  • MySQL中默认开启事务自动提交功能,即 每个SQL语句都会自动开启一个事务并提交,如果没有显式地使用COMMIT或者ROLLBACK语句,则所有的修改都将被保存到数据库中。这种情况下,如果某个操作出现错误,就无法回滚事务,已经执行的操作也无法撤回,这可能会导致数据丢失或不一致的情况。
  • 因此,在某些情况下,为了保证数据的完整性和一致性,需要手动关闭事务自动提交,即设置为手动提交模式,在必要的时候手动使用COMMIT或者ROLLBACK语句来提交或回滚事务,这样可以更好地控制事务的边界和粒度,避免不必要的错误和损失。
  • MySQL中关闭事务自动提交是为了在 一个事务 中执行 多个操作 并保持数据的一致性。
  • 在默认情况下,MySQL会自动将每个SQL语句作为单独的事务处理,并立即将其提交。这种行为虽然提供了便利性,但在一些情况下可能会导致数据不一致的问题。
  • 例如,如果一个事务中的一个操作失败,则整个事务应该回滚。如果自动提交已启用,则无法回滚整个事务,因为部分操作已经提交。另一个例子是当多个用户同时访问一个表时,自动提交可能导致并发问题
  • 关闭自动提交可以将多个操作放在同一个事务中,这样可以确保全部操作成功后再提交事务,从而保证数据的一致性。
  • 关闭事务自动提交可以在  一个事务 内执行多个SQL语句 ,当所有SQL语句执行完毕并且 都没有出现错误时,再提交这个事务,避免不必要的提交和回滚操作。这样可以提高数据的完整性、一致性和安全性。而如果开启了事务自动提交,在执行一条SQL语句后就会立即提交事务,如果后续SQL语句出现错误,就无法回滚已提交的SQL语句,从而可能导致数据的丢失或不一致的情况出现。因此,关闭事务自动提交是一种更加安全和可靠的方法。
  • MySQL默认情况下是开启事务自动提交的,也就是说,一旦执行了一条SQL语句,就会自动提交当前事务。如果在一些复杂的操作中遇到问题,事务就不能很好地保障数据的完整性,很难回滚到之前的状态,会导致数据丢失或错误,因此关闭事务自动提交可以更好地管理数据。
  • 关闭事务自动提交后,就需要手动开启和提交事务,可以将一系列SQL语句 组成一个逻辑操作,一旦其中某个操作出现问题,整个操作就可以回滚到之前的状态,保障数据的完整性。这可以防止意外删除或修改记录,确保数据的正确性和安全性。
  • 总之,关闭事务自动提交可以在复杂操作中更好地管理数据,减少数据丢失和错误的风险。
  • 在 MySQL 中关闭事物自动提交(autocommit)可以保证在一个事物中执行的所有语句要么全部成功,要么全部回滚,避免了在事物执行过程中的意外提交或回滚,从而保证了数据的完整性和 一致性
  • 当事物自动提交开启时,每一条 SQL 语句 都被 视为一个独立的事物,执行完毕后会自动提交。这在某些情况下可能会导致数据出现混乱或错误,例如在执行一系列更新语句时,其中某些语句成功而某些语句失败时,开启自动提交后已经成功的语句会被提交,而失败的语句则会回滚,导致数据不一致。
  • 因此,关闭事物自动提交可以从根本上避免这种情况的发生,以确保数据的 完整性 一致性
  • 关闭事务自动提交可以使得 多个操作在同一个事务中执行 ,从而保证数据的完整性和一致性。如果开启了事务自动提交,每个SQL语句将会在执行完成后立即提交,这会导致如果出现问题,无法回滚之前的操作。如果关闭事务自动提交,可以在多个操作执行完成后手动提交事务,或者在出现问题时回滚事务,从而保证数据的一致性和完整性。因此,关闭事务自动提交对于保证数据的正确性和完整性非常重要。
  • 关闭MySQL事务的自动提交,可以提高数据库操作的效率和安全性。
  1. 提高数据库操作的效率:

           MySQL中的 每个SQL语句都是一个事务,而每次执行SQL语句都会自动提交事务,这样就会产生 大量的I/O操作,降低数据库操作的效率。关闭自动提交功能后,可以在 多个SQL语句执行完成后再一次性提交,从而减少I/O操作,提高数据库操作的效率。

  1. 提高数据库操作的安全性:

关闭自动提交后,可以手动进行事务的提交和回滚,避免了因为操作失误或异常导致数据的不一致性,从而提高了数据库操作的安全性。同时,对于大批量数据的插入、删除、修改操作,也可以保证操作的原子性,避免了数据被部分修改的情况。

关闭MySQL的事务自动提交可以提高数据库操作的灵活性和安全性。以下是一些原因:

  1. 更好的错误处理:如果在一个完整的事务中执行多个SQL语句,其中一个语句失败可能会导致整个事务失败。如果自动提交打开,则错误会立即提交,使得回滚整个事务变得更加困难。关闭自动提交可以让系统在错误发生时先回滚,然后再处理错误。

  2. 更好的事务管理:手动提交事务可以让程序员更好地控制它们的性质和生命周期,从而更好地管理它们。这也可以提高代码的可读性和可维护性。通过手动提交和回滚来控制事务,程序员可以更好地处理并发访问,并更轻松地确保数据的完整性和一致性。

  3. 提高性能:关闭自动提交可以显著提高事务性能。自动提交会在每个SQL语句执行后立即执行提交操作,这会导致 频繁的磁盘写入和网络通信。关闭自动提交可以使得多个操作在内存中连续执行,从而减少了I/O操作和网络通信的次数,提高了事务的速度。

综上,关闭MySQL的事务自动提交可以提高数据库操作的灵活性和安全性,提高事务管理和性能。

在MySQL中关闭事务自动提交可以带来以下好处:

  1. 确保数据的一致性:事务是为了保证数据的一致性而存在的,如果自动提交,当每个SQL语句执行完后,就会立即将其提交到数据库中,这样可能会导致数据不一致的情况。

  2. 提高性能:开启事务自动提交会导致 频繁的I/O操作,这样会 影响系统性能。而关闭事务自动提交可以将 多个SQL语句作为一个事务进行提交,减少I/O操作,提高系统性能。

  3. 防止误操作:开启事务自动提交可能会导致一些不可逆的误操作,如删除了错误的数据,而关闭事务自动提交可以让开发者有机会进行回滚操作,避免误操作对数据造成的影响。

  4. 更好的控制事务:关闭事务自动提交可以让 开发者 手动控制事务的提交和回滚,从而更好的控制事务的执行过程。

1、取消自动提交 :conn.setAutoCommit(false)

  • 我们的 java 程序是自动默认提交事物的,也就是自动执行我们的SQL语句,并操作数据库,只要我们点击  运行 按钮 ,java就会帮我们自动执行SQL语句,可是有时候我们不想让程序干预我们的操作,所以我们可以关闭提交事务。
package com.csdn.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TransactionSupport {
    public static void main(String[] args) {

        Connection conn = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql:///fruitdb", "root", "123456");

            String sql = "insert into t_fruit values(0,?,?,?,?)";
            String sql2 = "update t_fruit set price=99 where fid = ? ";

            //在创建预处理命令对象之前,取消自动提交
            conn.setAutoCommit(false);

            PreparedStatement psmt = conn.prepareStatement(sql);
            PreparedStatement psmt2 = conn.prepareStatement(sql2);

            psmt.setString(1,"西瓜");
            psmt.setInt(2, 23);
            psmt.setInt(3, 234);
            psmt.setString(4, "牛逼");

            psmt2.setInt(1, 2);

            psmt.executeUpdate();
            psmt2.executeUpdate();

//            conn.commit();

        } catch (ClassNotFoundException | SQLException e) {
            throw new RuntimeException(e);
        }


    }
}
  •  此时运行程序,数据库中的数据不会发生更改因为我们已经关闭事务,SQL语句不会被执行

 2、手动开启事务

  • 一旦手动开启事务,我们 的 所有SQL语句会放在 一个事务 中执行,要么一起成功,要么一起回滚
package com.csdn.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TransactionSupport {
    public static void main(String[] args) {

        Connection conn = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql:///fruitdb", "root", "123456");

            String sql = "insert into t_fruit values(0,?,?,?,?)";
            String sql2 = "update t_fruit set price=99 where fid = ? ";

            //在创建预处理命令对象之前,取消自动提交
            conn.setAutoCommit(false);

            PreparedStatement psmt = conn.prepareStatement(sql);
            PreparedStatement psmt2 = conn.prepareStatement(sql2);

            psmt.setString(1,"西瓜");
            psmt.setInt(2, 23);
            psmt.setInt(3, 234);
            psmt.setString(4, "牛逼");

            psmt2.setInt(1, 2);

            psmt.executeUpdate();
            psmt2.executeUpdate();

            conn.commit();

        } catch (ClassNotFoundException | SQLException e) {
            try {
                conn.rollback();
            } catch (SQLException ex) {
                throw new RuntimeException(ex);
            }
        }
        
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1137425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Python实现文字的声音播放

winsound 是 Python 的一个内置模块,它提供了访问 Windows 操作系统的声音播放功能的接口。这个模块可以用来播放简单的声音,例如提示音或者短促的音效。 # Author : 小红牛 # 微信公众号:WdPython import win32com.client import winsound#…

【已解决】axios post请求body为字符串

文章目录 现在需要的参数格式正常post请求参数 解决方法代码示例axiosfetch![在这里插入图片描述](https://img-blog.csdnimg.cn/9372f6efae13432896368aa3e25194cf.png) 现在需要的参数格式 正常post请求参数 解决方法 修改 Content-Type 为 text/plain 参数直接给一个字符串…

RT-Thread 8. RT-Thread Studio arm-gcc使用10.2.1编译

1. gcc编译器下载 E:\RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\ARM\GNU_Tools_for_ARM_Embedded_Processors2. 把5.4.1 改为5.4.11 再“全部构建”,提示错误 3. 把工具链版本改为10.2.1,再“全部构建”

如何正确设置Kubernetes的request和limit

有效设置Kubernetes的request和limit对应用程序性能、稳定性和成本有重大影响。然而,在过去的一年里,与许多团队的合作向我们表明,很难确定这些参数的正确值。出于这个原因,我们创建了这个简短指南,以帮助团队更准确地…

leetcode动态规划学习

0-1背包问题 参考: 【动态规划/背包问题】那就从 0-1 背包问题开始讲起吧 ... 内容是学习 宫水三叶的刷题日记 公众号专题内容时的笔记,为了方便个人复习整理到这里。建议大家关注该公众号,写的很清楚,有更多内容。 经典0-1背…

Linux进程等待

Linux进程等待 一.什么是进程等待二.为什么要有进程等待三.怎么进行进程调用1.僵尸进程问题2.waitpid3.获取进程退出状态 一.什么是进程等待 通过系统调用wait和waitpid,来进行对子进程进行状态检测与回收功能。 二.为什么要有进程等待 1。之前讲过,子…

【第25例】IPD体系进阶:需求分析团队RAT

目录 简介 RAT CSDN学院相关内容推荐 作者简介 简介 RAT是英文Requirement Analysis Team英文首字母的简称,也即需求分析团队,每个产品线都需要设定对应的一个RAT的组织。 RAT主要负责产品领域内需求的分析活动,是RMT的支撑团队: 这个时候可以将RAT细化为PL-RAT团队,…

C语言--strcmp函数(介绍与自己实现)

strcmp函数:字符串比较函数。 用法:strcmp(str1,str2)。str1,str2可以是字符串常量或者字符串变量,返回值为整形。 str1小于str2,返回负值,str1等于str2,返回为0,str1大于str2,返回正值 那么两个字符串是…

Ubuntu环境下DOSBOX的配置

【步骤一】 先打开命令行,进入root模式,输入如下语句: sudo apt-get install dosbox 该语句的作用主要是安装dosbox 【步骤二】 安装完成之后,命令行输入dosbox 会进入dosbox页面: 【步骤三】 在你的主机中&…

腾讯云主机服务器什么时候最便宜?

腾讯云主机服务器价格对于许多用户来说是一个重要考虑因素。本文将探讨腾讯云主机服务器的最佳购买时期,并为大家提供一些建议,帮助大家以最优惠的价格购买腾讯云主机服务器。 首先,我们需要了解腾讯云服务器的优惠政策。一般来说&#xff0c…

Games104现代游戏引擎笔记 网络游戏进阶架构

Character Movement Replication 角色位移同步 玩家2的视角看玩家1的移动是起伏一截一截,并且滞后的 interpolation:内插值,在两个旧的但已知的状态计算 extrapolation:外插值,本质是预测 内插值:但网络随着…

用友U8SMSProxy -SQL注入漏洞

0x01 漏洞介绍 用友GRP-U8 R10政务管理软件是由用友政务公司基于云技术所推出的第十代政务产品。这款产品继承了用友R9、R9i、U8等行政事业版产品的各项优点,并融合了全国广大用户的最佳实践应用。它旨在为政府财政部门、社保部门、卫生部门、教育部门、民政部门、党…

phar反序列化

序列化和反序列化的区别? 可参考:【精选】什么是反序列化?反序列化的过程,原理-CSDN博客 通俗的说序列化将对象转化为了字符串,包含了对象的所有数据信息, 反序列化时再根据这些信息还原对象 序列化&…

0026Java程序设计-中学走读生信息管理系统设计与实现

文章目录 摘要**目录**系统设计开发环境 摘要 目前,中学走读生信息管理系统已经发展成为学校的学生走读管理工作中必不可少的一个组成部分,没有该系统,学生的日常工作就会变得繁琐、效率低下。在信息化的社会发展下,有必要建立一…

Three.js 基础纹理贴图

本文简介 带尬猴,我嗨德育处主任 尽管 Three.js 文档已经比较详细了,但对于刚接触 Three.js 的工友来说,最麻烦的还是不懂如何组合。Three.js 的功能实在太多了,初学者很容易被大量的新概念冲晕。 本文主要讲解入门 Three.js 必…

BES2700 蓝牙协议之RFCOMM通道使用方法

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务 BES2700 RFCOMM通道使用方法 RFCOMM_CHANNEL_NUM 枚举定义了一系列的通道号码,并为每个通道号码指定了一个具体的名称。以下是其中一些通道的中文含义: RFCOMM_CHAN…

解决Windows出现找不到mfcm90u.dll无法打开软件程序的方法

今天,我非常荣幸能够在这里与大家分享关于mfc90u.dll丢失的5种解决方法。在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失。那么,mfc90u.dll究竟是什么文件呢?接下来&#xff0c…

【代码随想录】算法训练计划02

1、977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 思路: 这题思路在于——双指针…

网工内推 | 国企,解决方案工程师,最高30k,有软考证书优先

01 中电信数智科技有限公司海南分公司 招聘岗位:解决方案经理(ICT) 职责描述: 1、负责调动前后端资源做好全省ICT业务的售前支撑服务工作。 2、根据实际项目需求,主动协同客户渠道开展ICT项目商机挖掘,促进…

点云处理【七】(点云配准)

点云处理 第一章 点云数据采集 1.点云配准 点云配准是将两个或多个点云数据集融合到一个统一的坐标系统中的过程。这通常是为了创建一个完整的模型或融合从不同视角采集的数据。 点云配准一般分为粗配准和精配准,粗配准指的是在两幅点云之间的变换完全未知的情况下…