• 数据库 事务


    事务

    基本介绍

    • 概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
    • 操作
      (1)开启事务:start transaction
      (2)回滚:rollback
      (3)提交:commit
    • 事务提交方式
      (1)自动提交
      mysql就是自动提交的
      一条DML(增删改)语句会自动提交一次事务
      (2)手懂提交
      Oracle默认手动提交
      需要先开启事务,再提交
      (3)修改默认提交方式
      查看事务默认提交方式:SELECT @@autocommit
      1 表示自动提交,0表示手动提交
      修改默认提交方式:SET @@autocommit = 0
      此时修改操作在不执行提交操作时,只是临时有效,不会影响实际的数据库

    四大特征

    • 原子性:是可分割的最小单位,要么同时成功,要么同时失败
    • 持久性:当事务提交或回滚后,数据库会持久化的保存数据
    • 隔离性:多个事务之间相互独立
    • 一致性:事务操作前后,数据总量不变

    事务的隔离级别

    • 概念:多个事务之间相互独立,但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题
    • 存在问题:
      (1)脏读:一个事务读取到另一个事务中还没有提交的数据
      (2)不可重复读(虚读):在同一个事务中,两次读取到的数据不一样
      (3)幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加一条数据,则第一个事务查询不到自己的修改
    • 隔离级别
      (1)read uncommitted:读未提交
      产生问题:脏读,不可重复读,幻读
      (2)read committed:读已提交(Oracle默认)
      产生问题:不可重复读,幻读
      (3)repeatable read:可重复读(Mysql默认)
      产生问题:幻读
      (4)serializable:串行化
      可以解决所有问题
    • 注意:隔离级别从小到大,安全性越来越高,但是效率越来越低
    • 查询隔离级别
      select @@tx_isolation
    • 设置隔离级别
      set global transaction isolation level 级别字符串

    JDBC管理事务

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    public class JDBCDemo {
        public static void main(String[] args) throws SQLException {
            Connection conn = null;
            try{
                conn = JDBCUtils.getConnect();
                //开启事务
                conn.setAutoCommit(false);
    
                //sql执行
    
                //提交事务
                conn.commit();
            } catch (Exception e) {
                e.printStackTrace();
                //发生异常,回滚 
                conn.rollback();
            }finally {
                //关闭资源
    
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    【Vue】鼠标悬浮卡片展示可点击按钮
    flink 技术总结待续
    “百模大战”大模型哪家强?开源的全面评测来了!
    走好这六步,成为网络安全工程师一路畅通无阻
    请求转发和重定向的区别
    NB!各种免费API接口分享,热门、有意思的都有~
    编程思考 : Java中如何用简单的数字描述更多的信息
    计算机毕业设计(附源码)python-在线作业管理系统
    基于 .net core 8.0 的 swagger 文档优化分享-根据命名空间分组显示
    黑胶歌曲没权限,还好我会Python,一分钟一个歌单,硬盘有点不够用了~
  • 原文地址:https://blog.csdn.net/weixin_57596714/article/details/125467201