精华内容
下载资源
问答
  • MySQL事务保存点

    千次阅读 2021-01-09 20:18:20
    设置一个断点,当你在数据库中插入一条数据后,在这条语句后面设置一个savepoint,当你需要rollback的时候,只需要回滚这个savepoint时就可以,这样就节省了大量的时间,提高的工作效率,也需要消耗数据库的...

    当你在数据库插入大量语句后,突然其中一句报错,rollback大量数据的效率极低,如何解决?

    一:我们在这里提出一个事务“保存点”的概念

    那什么是保存点?粗略来讲相当于Java中的“断点”,设置一个断点,当你在数据库中插入一条数据后,在这条语句后面设置一个savepoint,当你需要rollback的时候,只需要回滚到这个savepoint点时就可以,这样就节省了大量的时间,提高的工作效率,也不需要消耗过多的数据库的资源。

    二:代码演示

    我的数据库表有cid cname pid三个属性,用sql语句插入

    1. 首先开启事务
    START TRANSACTION;
    
    INSERT into city VALUES(NULL,"武汉市","7");
    

    插入成功后,我们在这设置一个保存点a

    SAVEPOINT a;
    
    INSERT into city VALUES(NULL,"北京市","8");
    

    插入成功后,我们在这设置一个保存点b

    SAVEPOINT b;
    
    INSERT into city VALUES("南京市","9");
    

    这边sql语句出现错误

    INSERT into city VALUES("南京市","9")
    > 1136 - Column count doesn't match value count at row 1
    > 时间: 0s
    
    

    5.这边我们用保存点进行回滚

    rollback to SAVEPOINT a;
    

    回滚到a成功

    rollback to SAVEPOINT a
    > OK
    > 时间: 0s
    

    在插入大量数据中间发生错误需要回滚,就可以利用保存点的方法来有效的解决此类问题,希望对你们有帮助!

    展开全文
  • 事务 1事务由一系列的相关的...4如果事务遇到错误而被取消或者回滚,事务的所有sql语句操作都会被清除,数据库恢复到事务执行前的状态。 5一个事务的所有sql语句要么全部被执行,要么全部没有执行事务特性acid 一组sq

    事务
    1事务由一系列的相关的sql语句组成的最小逻辑工作单元
    2oracle以事务为单位来处理数据,保证数据的一致性
    3如果对事务进行提交,该事物的所有sql语句操作都会提交,成为数据库的永久组成部分
    4如果事务遇到错误而被取消或者回滚,事务的所有sql语句操作都会被清除,数据库恢复到事务执行前的状态。
    5一个事务的所有sql语句要么全部被执行,要么全部没有执行

    事务特性acid
    一组sql语句要成为事务,必须满足以下特性
    1原子性a
    事务是不可分割的原子工作单元;对数据的数据修改,要么全部执行,要不全部都不执行。
    2一致性c
    事务完成时,必须使所有的数据保持一致。在相关数据库中,所有的规则都必须应用于事务的修改,以保持数据的完整性。事务结束时候,所有的内部数据结构(B树索引或者双向链表)都必须正确
    3隔离性i
    由并发事务所做的修改必须与其他并发事务所做的修改隔离
    4持久性d
    事务完成后,对系统的影响是永久性的

    提交事务
    提交事务表示该事务中对数据库所做的全部操作都将永久记录在数据库中。

    提交事务commit语句,标志一个成功的隐性事务或者显性事务的结束.

    执行commit语句数据库会做的动作
    1在回退段内的事务表中记录这个事务已经提交,并生成一个唯一的系统改变号scn,并将该scn值保存到事务表中,用于唯一标识这个事务
    2启动lgwr后台进程,将sga区中缓存的重做记录写到联机重做日志文件,并且将该事物scn值也保存到日志文件中
    3oracle服务器进程释放事务处理所使用的资源
    4通知用户事务已经提交

    回滚事务

    rollback 【to savepoint savepointName】
    回滚事务表示该事务对数据库的所有操作都将取消
    语句
    rollback 表示将事务回滚到事务的起点或者事务的某个保存点

    回滚事务,oracle会做的动作
    1oracle通过回退段中的数据撤销事务中所有的sql语句对数据库所做的任何操作
    2oracle服务器进程事务使用的所有资源
    3通知用户事务回滚成功

    保存点
    在事务的处理过程中,如果发生错误并且使用rollback进行回滚
    ,那么整个事务对数据库的操作都将被撤销,在一个庞大的事务中,这是很浪费资源的,比如事务前半部分是正确的,事务的后半部分是错误的,那么我想回滚到前半部分结束位置,这时就可以使用保存点

    一个事实可以建立多个保存点,将事务分割成一系列的部分.事务回滚就可以回滚到其中的某个保存点上

    语法
    savepoint 【savepointName】
    savepointName:保存点的名字

    这里写图片描述

    1创建数据,在第二条记录的时候设置一个保存点s2;
    2在第3条记录的时候设置一个保存点s3;
    3在第4条记录的时候设置一个保存点s4;
    4在没有提交的情况下查看有4条纪录
    5回到保存点s2,并查看记录
    这里写图片描述
    6提交事务
    这里写图片描述

    展开全文
  • 事务提交、回滚、保存点

    千次阅读 2017-03-23 13:25:45
    * 事务四个特性: * 1.原子性 * 2.一致性 * 3.隔离性 * 4.持续性 * @author John * */ public class TransactionDemo { //事务的提交和回滚 @Test public void transaction1() throws SQLException{ ...
    /**
     * 事务四个特性:
     * 1.原子性
     * 2.一致性
     * 3.隔离性
     * 4.持续性
     * @author John
     *
     */
    public class TransactionDemo {
        //事务的提交和回滚
        @Test
        public void transaction1() throws SQLException{
            Connection conn=null;
            PreparedStatement ps=null;
            ResultSet rs=null;
            JDBCUtils utils = JDBCUtils.getInstance();
            String sql1 = "update user set age=age-1 where id = 6";
            String sql2 = "select age from user where id = 7";
            try {
                conn = utils.getConnection();
                //设置事务自动提交为false,这样就不会自动提交事务了
                conn.setAutoCommit(false);
                ps = conn.prepareStatement(sql1);
                ps.executeUpdate();
    
                ps = conn.prepareStatement(sql2);
                rs = ps.executeQuery();
                while(rs.next()){
                    int age = rs.getInt("age");
                    if(age>11){
                        throw new RuntimeException("大于11");
                    }
                }
                //这个过程是一个事务
                conn.commit();
            } catch (SQLException e) {
                if(conn!=null){
                    //如果事务提交失败 ,回滚事务
                    conn.rollback();
                }
                throw e;
            }finally{
                utils.free(conn, ps, rs);
            }
    
        }
        //保存点
        @Test
        public void savePoint1() throws SQLException{
            Connection conn=null;
            PreparedStatement ps=null;
            ResultSet rs=null;
            JDBCUtils utils = JDBCUtils.getInstance();
            String sql1 = "update user set age=age-1 where id = 6";
            String sql2 = "select age from user where id = 7";
            String sql3 = "update user set age=age-1 where id = 5";
            Savepoint sp=null;
            try {
                conn = utils.getConnection();
                //设置事务自动提交为false,这样就不会自动提交事务了
                conn.setAutoCommit(false);
                ps = conn.prepareStatement(sql1);
                ps.executeUpdate();
                //设置保存点
                sp=conn.setSavepoint();
    
                ps = conn.prepareStatement(sql3);
                ps.executeUpdate();
                //
                ps = conn.prepareStatement(sql2);
                rs = ps.executeQuery();
                while(rs.next()){
                    int age = rs.getInt("age");
                    if(age>11){
                        throw new RuntimeException("不得大于11");
                    }
                }
                conn.commit();
            } catch (RuntimeException e) {
                if(conn!=null && sp!=null){
                    //如果事务提交失败 ,回滚到保存点位置
                    conn.rollback(sp);
                    //提交保存点之前执行结果
                    conn.commit();
                }
                throw e;
            }finally{
                utils.free(conn, ps, rs);
            }
    
        }
    }
    
    展开全文
  • 关于设置事务回滚保存点的设置

    千次阅读 2011-08-17 20:40:21
    下面用伪代码说明ingres数据库事务执行失败后全部回滚的实现过程 : ... //如果此处 保存点所依赖的transaction_handle事务句柄由connect()连接数据库时获取,则创建保存点成功,可以用rollbac

    下面用伪代码说明ingres数据库事务执行失败后全部回滚的实现过程 :

     

    try
    {
    
     savepoint(sp); //如果此处 保存点所依赖的transaction_handle事务句柄由connect()连接数据库时获取,则创建保存点成功,可以用rollback(sp)实现全部回滚;如果此时事务句柄为空,或者不是下面要执行事务的事务句柄,则此处savepoint(sp)创建保存点失败,要实现全部回滚必须用rollback(NULL);
    
      result=sql_query(A);//第一个查询语句A
    if(result==failure)
      throw 1;
      savepoint(sp1); //第一个保存点sp1
    
     result= sql_query(B);
    if(result==failure) throw 2;
      savepoint(sp2);
    
     result= sql_query(C);
    if(result==failure) throw 3;
    
    //提交事务
    commit();
    
    }
    catch(int i)
    {
      if(i==1)
    {//全部回滚
     rollback(NULL); //参数为空时就可以全部回滚 ,这是因为如果自动提交事务关闭之后,在commit之前的所有query语句都在一个事务中
    }
    else if(i==2)
    {
    //部分回滚
       rollback(sp1); //回滚到sp1
    }
    }
    

    展开全文
  • 1.连接数据库上,并执行第一条DML语句 2.前一个事务结束后,又输入另外一条DML语句 在下列事件之一发生时,事务就结束了: 1.执行Commit或者RollBack语句 2.执行一条DDL语句,例如Create Table语句;...
  • oracle事务 行级锁 保存点 回滚 提交

    千次阅读 2012-07-22 18:57:23
    oracle事务 一般事务(DML)即数据修改(增、删、改)的事务 事务会将所有在事务中被修改的数据行加上锁(行级锁),来阻止其它人(会话)...1、所有除A以外的人看不到被A所修改后的数据 2、B会处于等待状态,直到
  • 89.Oracle数据库SQL开发之 ...如果有一个很大的事务,这将非常有用,因为这样如果在保存点后进行了误操作,并需要将整个事务一直回滚最开头。 执行如下: store@PDB1> select product_id,price from productswhere
  • SQL server事务中的保存点(save)

    千次阅读 2009-03-07 04:12:00
     在可能发生错误的情况下,保存点很有用。在很少出现错误的情况下使用保存点回滚部分事务,比让每个事务在更新之前测试更新的有效性更为有效。 设置保存点的语法: SAVE TRANSACTION savePoint
  • 1.开启了@Transactional注解 2.数据库中保存了一条数据,然后下一行代码查询是可以查询这条数据的,但是数据库中没有 原因是:在开启事务后,只有commit事务提交后才可以查询 ...
  • MySQL-事务

    千次阅读 2020-12-01 14:59:32
    文章目录事务课前题目一、事务的含义二、特点(ACID)三、事务的使用步骤 ★3.1 隐式(自动)事务:3.2 使用显式事务① 开启事务② 编写一组逻辑sql语句③ 设置保存点④ 结束事务结束事务回滚:rollback3.3 使用案例...
  • 偶尔出现一些小的问题,逻辑处理是先保存数据,保存成功后,给别的服务发MQ消息,正常情况下,只要没有网络问题或者超时等问题,数据都能保存成功,紧接着就是发送消息,但是偶尔会出现数据保存失败,事务回滚,但是...
  • ORA-02067:要求事务处理或保存回退 A服务器Oracle建立dblink,存储过程的内容是:往B服务器中oracle的表里插入数据。 在客户端访问调用此存储过程的时候报以上错误。 解決模拟 客户系统...
  • 事务

    千次阅读 2019-03-23 17:13:47
    Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务 1、JDBC事务 JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工...
  • Spring事务和MySQL事务详解面试

    万次阅读 多人点赞 2020-09-10 23:56:36
    文章目录数据库事务事务是什么事务的四大特性MySQL事务隔离级别查看MySQL当前事务隔离级别MySQL默认操作模式为自动提交模式JDBC处理事务Spring事务Spring的事务传播PROPAGATION_REQUIREDPROPAGATION_...
  • @Transactional注解事务不回滚起作用无效

    万次阅读 多人点赞 2017-01-09 11:23:58
    这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然回滚。后来终于找到了原因。 如果你也出现了这种情况,可以从下面开始排查。 一、特性 先来了解一下@Transactional注解事务的特性吧,...
  • Postgresql保存点(savepoint)功能

    千次阅读 2017-10-11 17:47:32
    PG数据库保存点PG数据库支持保存点(savepoint)功能,在比较大的事务中,可以把执行过程分为几个步骤,每个步骤执行完成后创建一个保存点,后续步骤执行失败时,可回滚之前的保存点,而不必回滚整个事务。...
  • JDBC事务原理及Spring事务处理机制

    万次阅读 多人点赞 2018-07-17 19:54:43
    事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 一致性(Consistency):事务开始前和结束后,...
  • InnoDB事务

    万次阅读 2019-08-05 21:10:40
    1.前言 事务是数据库区别于文件系统的重要特性之一,InnoDB存储引擎中的事务符合ACID的特性,即 原子性(atomicity) 一致性(consistency) ...A(Atomicity)原子性:指整个数据库事务可分割的工作单位...
  • Spring中的事务及数据库事务的关系

    千次阅读 2019-06-13 17:23:24
    如果对MySQL中的事务不了解的话,请先看 基于MySQL 8.0 对事务的深度理解 二、Spring中的事务 Spring管理事务的方式 编程式事务 编程式事务就是利用手动代码编写事务相关的业务逻辑,这种方式比较复杂、啰嗦,...
  • 【小家java】Spring事务不生效的原因大解读

    万次阅读 多人点赞 2018-05-25 12:05:20
    因此我们在使用spring事务的时候,门槛变得异常的低,小学生水平就能很好的管理好事务,但是同学们或多或少都遇见过一些事务不生效的难题,为啥呢?本文就针对于此来做一些具体举例分析,尽量做到全覆盖 2、栗子 ....
  • 在开发中往往会遇到事务问题,当我们必须保证事务的时候,可以在进行具体的保存方法上面加上Spring的事务注解***@Transactional***,即如下的方式: public class SomeServiceImpl implement ISomeService { @...
  • mysql中事务处理那

    千次阅读 2013-05-25 21:23:27
    1事务隔离级别 事务有ACID特性: A:atomicity 原子性 要么都操作成功,要么就都失败。只有查询的事务很容易处理原子性,但是有更新和插入动作的事务,就要注意并发对这部分数据的影响了。   C:consistency 一致...
  • redis——事务

    千次阅读 多人点赞 2019-10-10 17:10:03
    在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段: 开始事务。 命令入队。 执行事务。 以下是一个事务的例子, 它先以M...
  • 分布式涉及的原理: CAP原理: BASE理论 柔性事务和刚性事务 柔性事务分为: 分布式一致性协议 XA接口 Jta规范 两阶段提交协议 2PC 三阶段提交协议 3PC XA与TCC 的比较: 分布式事务解决...
  • Hibernate的事务的隔离性

    万次阅读 2018-04-11 17:30:09
    隔离性:指多线程环境下,一个线程中的事务不能被其他线程中的事务打扰持久性:事务一旦提交,就应该被永久保存起来。如果考虑事务的隔离性,会出现以下问题:脏读:指一个线程中的事务读取了另外一个线程中未...
  • springboot junit 保存到数据库

    千次阅读 2017-08-02 15:10:40
    添加注解 @Rollback(false) 完整代码如下: @RunWith(SpringRunner.class) @SpringBootTest(classes=Application.class,webEnvironment = WebEnvironment.RANDOM_PORT) @DirtiesContext @...
  • Java 事务

    千次阅读 2012-06-17 12:55:39
    事务 从MySQL 4.1开始支持...如果单元中的一个语句能完成,整个单元就会回滚(撤销),所有影响到的数据将返回到事务开始以前的状态。因而,只有事务中的所有语句都成功地执行才能说这个事务被成功地执行。 ...
  • 如果开启了autocommit,数据库服务器自动开启事务(每一条sql语句开始执行的时候),自动提交事务(sql语句执行成功),自动回滚事务(sql语句执行失败)。很显然:autocommit没有什么实际意义,如果要使用事务,就必需...
  • 概述 ... Spring不但提供了和底层事务源无关的事务抽象,还提供了声明性事务的功能,可以让开发者从事务代码中解放出来。 数据库事务的概念数据并发的问题数据库锁机制事务隔离级别JDBC对事务的支持

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 317,390
精华内容 126,956
关键字:

找不到事务保存点