美文网首页
事务原理

事务原理

作者: 旦暮何枯 | 来源:发表于2019-04-03 14:18 被阅读0次

事务

事务是并发控制的基本单位,指作为单个逻辑工作单元执行的一系列操作,而这些逻辑工作需要满足 ACID 特性。

  • ACID
    • 原子性(Atomicity):事务是数据库逻辑工作单元,事务中包含的操作要么都执行成功,要么都执行失败。
    • 一致性(Consistency):事务执行的结果必须是使数据库数据从一个一致性状态变到另外一种一致性状态。
    • 隔离性(Isolation):一个事务的执行过程中不能影响到其他事务的执行,事务内部的操作及使用的数据对其他事务是隔离的,并发执行各个事务之间无不干扰。
    • 持续性(Durability):即一个事务执一旦提交,它对数据库数据的改变是永久性的。之后的其它操作不应该对其执行结果有任何影响。

JDBC 的事务控制

Connection 对象下的三个方法实现对事务的控制。

setAutoCommit()

  • 设置为 false,将所属 Connection 对象的后续语句作为 JDBC 事务进行处理,直到调用 commit() 方法。
  • true 将所属对象的后续每个语句作为单独的 sql 语句进行处理(默认状态)。

commit()

提交事务,使事务中的所有 sql 生效。

rollback()

回滚事务- 回滚到事务开始之前的状态

conn = ds.getConnection();
//            开启事务
            conn.setAutoCommit(false);
            psta = conn.prepareStatement("update user set account = ? where name = ?");
            psta.setInt(1, 0);
            psta.setString(2, "Mike");
            psta.execute();

            psta.setString(1, "100");
            psta.setString(2, "Bob");
            psta.execute();

//            提交事务
            conn.commit();

在事务未提交之前,所有的 sql 语句都不会执行。

设置检查点

setSavePoint()

设置数据库保存点,在出现异常后,可以回复到该点的状态

rollback(SavePoint savePoint)

回复方法

public void Transaction() {
        Connection conn = null;
        PreparedStatement psta = null;
        ResultSet rs = null;
        Savepoint sp = null;

        try {
            conn = ds.getConnection();
//            开启事务
            conn.setAutoCommit(false);
            psta = conn.prepareStatement("update user set account = ? where name = ?");
            psta.setInt(1, 0);
            psta.setString(2, "Mike");
            psta.execute();
            sp = conn.setSavepoint();

            psta.setString(1, "100");
            psta.setString(2, "Bob");
            psta.execute();

//            提交事务
//            conn.commit();
            throw new SQLException();
        } catch (SQLException e) {
            try {
//                回滚事务到检查点
                conn.rollback(sp);
                psta.setString(1, "100");
                psta.setString(2, "GuoSi");
                psta.execute();
                conn.commit();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
//            e.printStackTrace();
        } finally {

            try {
                if (conn != null)
                    conn.close();
                if (psta != null)
                    psta.close();
                if (rs != null)
                    rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }

设置 JDBC 中的隔离级别

getTranactionIlsoLation()

setTranactionIlsoLation()

各个隔离级别内容在 MySQL 45讲 第三讲内容中

『项目地址』:https://github.com/wengfe/JAVA/blob/master/HelloJDBC/src/HelloTransaction.java

相关文章

  • Spring事务完全解析

    事务是什么?了解事务的原理吗?说下Spring的事务原理,能自己实现Spring事务原理吗?先自我检测下这些知识掌...

  • Spring事物原理完全解析

    事务是什么?了解事务的原理吗?说下Spring的事务原理,能自己实现Spring事务原理吗?先自我检测下这些知识掌...

  • 事务原理

    事务 事务是并发控制的基本单位,指作为单个逻辑工作单元执行的一系列操作,而这些逻辑工作需要满足 ACID 特性。 ...

  • Redis 事务操作原理

    事务原理剖析 redis事务操作,原理是基于pipe队列实现原子性提交操作,在只想事务操作,相当于将需要提交的命令...

  • 分布式事务(2)Spring事务

    2.1 Spring事务原理 Spring支持编程式事务和声明式事务。编程式事务就是用个事务类Transactio...

  • mysql事务隔离机制及其隔离级别、实现原理分析

    目录 事务特性ACID属性 并发事务带来的问题 事务隔离级别 事务实现原理 事务特性ACID属性 事务特性指的就是...

  • mysql事务隔离机制及其原理

    目录 事务特性ACID属性 并发事务带来的问题 事务隔离级别 事务实现原理 闲聊 【迈莫coding】 事务特性A...

  • 分布式事务的设计与实现

    第一章 事务理论基础第二章 MySQL 事务原理第三章 Spring 事务原理第四章 Seata AT 模式使用及...

  • spring 事务

    本章探索spring事务的原理需要知道spring事务的原理,就必须先理解spring AOP在我之前的文章有讲解...

  • 程序员之Spring

    1. Spring事务 spring的事务实现原理Spring事务将connection放入到当前线程的threa...

网友评论

      本文标题:事务原理

      本文链接:https://www.haomeiwen.com/subject/yuxzbqtx.html