MySQL事务

MySQL事务

  • 事务 --> 即让一系列的操作可以同时执行 当遇到错误可以同时回滚到执行前的操作

为什么要使用事务

面对一系列的操作,也就是需要代码同时完成 未完成可以回到最初的数据。保证数据的安全和逻辑上的要求

四大特性

原子性

要么都成功要么都失败

一致性

事务前后的数据完整性保持一致

持久性- --事务提交

事务一旦提交不可逆,被持久化到数据库

隔离性

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个事务之间要相互隔离。

隔离所导致的一些问题:

脏读:

指一个事物读取了另外一个事务未提交的数据

不可重复读:

在一个事务内读取表中的某一行数据,多次读取结果不同。(不一定是错误,只是某些场合不对)

虚读(幻读):

在一个事务内读取到了别的事务插入的数据,导致前后读取不一致

事务一般流程

  1. 关闭自动提交事务 开启手动提交事务 //MySQL默认自动提交事务
  2. 开启事务--->
    • MySQL中 SET autocommit = 0 -- 关闭 SET autocommit = 1 -- 开启
    • 在java中将connection.setAutoCommit(false)
  3. 在try代码块中将一系列需要同时完成的代码写入
  4. 在try的最后一行加上事务提交 commit (connection.commit() )
  5. 在 catch中 也就是 事务中发生了错误 使用回滚 (connection.rollback() )
    public void changeMoney(String from,String to,Integer money){

        Connection connection = JDBCUtils.getConnection();
        try {
            connection.setAutoCommit(false);
            cm.subMoney(from, money,connection );
            //int i=1/0;
            cm.saveMoney(to, money, connection);
            connection.commit();
        } catch (SQLException e) {
            e.printStackTrace();
            try {
                connection.rollback();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        } finally {
            JDBCUtils.close(connection);
        }
    }
posted @ 2022-03-29 19:20  舟思水  阅读(36)  评论(0)    收藏  举报