我反悔了!)MySQL事务处理

MySQL事务处理

事务处理是来维护数据的完整性的。可以使批量的数据要么都执行,要么不执行(有错误的话)。

比如说我们去银行汇款,要是汇款的操作成功了,对方取钱的操作失败了,那不是被白嫖?所以我们设置操作可以撤回。这就叫事务处理

首先了解一个概念:引擎
并非所有的引擎都支持事务处理 查看你的引擎

show table status from 库名;

InnoDB 一个可靠的事务处理引擎,不支持全文搜索 MyISAM 性能极高,支持全文搜索,不支持事务处理 MEMORY
功能等同于MyISAM,数据存在内存中,速度很快

建表时确定引擎
create table students(...)engine=InnoDB;

如果你建表的时候后面没有engine=引擎名 那就是默认引擎 我的是InnoDB,可能你的跟我不一样
————————————

然后我们来了解一下三个关键字

rollback(回退)用于撤销操作
commit(提交)用于将结果写入数据表
savepoint(保留点)回退到这个保留点,不用对整个事务回退

默认情况执行sql语句的时候都是自动提交的,就是说一执行就写入表中了 不能回退

一、我们可以通过设置自动提交使我们可以撤回

//查看自动提交开关
select @@autocommit;
//设置手动提交
set autocommit=0;
//如果是默认自动提交,每执行一条sql都会自动提交无法rollback


二、还有一种可以使我们撤回的方法就是开启事务,无需修改autocommit

start transaction
//或者begin 作用与  start transaction相同
//执行一些sql语句(修改数据之类的)
rollback//你不能回退create、drop、select操作

提交(写入)数据

start transaction
//执行一些sql语句(修改数据之类的)
commit;
//提交之后不能回退

使用保留点

savepoint delete1;
rollback to delete1;

当我们提交或者回退之后,事务会自动关闭,以后的更改就会隐含提交


如果你用JBDC处理事务

就要修改成手动提交

public class Transaction{
    public static void main(String[] args) {
        //初始化
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e){
            e.printStackTrace();
        }
        String sql="insert into hero values(0,?,?,?)";
        try(    //连接数据库
                Connection cn= DriverManager.getConnection(
                        "jdbc:mysql://localhost:3306/fzk?serverTimezone=UTC",
                        "root", "810481");
                PreparedStatement p=cn.prepareStatement(sql);

        ){  cn.setAutoCommit(false); //将自动提交修改成手动
            p.setString(1,"奥巴马");
            p.setInt(2,96);
            p.setInt(3,49);
            //这个数字是指从 '?' 开始,setString插入的是第一个问号
            p.execute();
            cn.rollback();      //回滚,这条数据将不会插入
        }catch (SQLException e){
            e.getErrorCode();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值