批处理&事务

批处理

@Test
    public void test() {
        connection = JDBCUtils.getConnection();

        try {
//            ps = connection.prepareStatement("insert into user (name,password,loves,email,img) values (?,?,?,?,?)");
            ps = connection.prepareStatement("delete from user where name=?");
            for (int i = 10; i < 1000; i++) {
                ps.setString(1,i+"");
                ps.addBatch();
            }
            ps.executeBatch();


        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCClose.JDBCClose(connection,ps,resultSet);
        }
    }

写进内存:ps.addBatch();
执行批处理:ps.executeBatch();

当sql语句太多时可以在循环中添加一个条件,每1000条执行一次,这就叫分批处理
例如这样:

if(i%1000==0){
	ps.executeBatch();
	//清空缓存
	ps.clearBatch();
}

事务

开启事务:
start transaction

提交事务:
commit

回滚事务;
rollback

在JDBC中这样用:

			//开启事务
            connection.setAutoCommit(false);
            //事务回滚
            connection.rollback();
            //事务提交
            connection.commit();

事务回滚一般放在catch中,当出现异常时回滚操作

事务的特点

ACID
一致性
原子性
隔离性
持久性

脏读:

一个线程中的事务读取到了另一个线程中未提交的update数据
例子:
事务一:张三给李四转账100元
事务二:李四查账

事务一开始事务,但是没有提交事务
这时候事务二开始事务
李四查账可以看到多出来的100元
这是不对的
这就是脏读

避免脏读
read committed

不可重复读:

一个线程中的事务读取到了另一个线程的事务中已提交的update的数据
例子
张三买书,第一次查询时书的库存还有一本,可以购买,这时就准备下单了,就在这时,
另一个李四把书买走了,(update操作),当系统再去查看书的数量时,发现书的库存为0,就不能下单了,
这就是不可重复读.

避免不可重复读
repeatable able

幻读:

一个线程的事务中读取到了另一个线程的事务中已提交的insert数据
张三打印自己的银行卡余额有200,打印的前一刻,张三妻子往里面转了100块钱(insert操作),所以打印出来了300块,这就是幻读

事务隔离级别:

read uncommitted 脏读,不可重复读,幻读有可能发生
read committed 避免脏读(不可重复读和幻读可能发生)
repeatable read 避免脏读,不可重复读(幻读可能发生)
serializable 避免脏读,不可重复读,幻读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值