一、事务概念和特性
1、事务概念:是指一组原子操作(一组sql语句执行)的工作单元
2、这个工作单元中的所有原子操作在进行期间,与其他事务隔离,免于因数据来源的交相更新发生混乱,事务中所有原子操作要么全部执行,要么全部失败。
3、设置事务的提交方式为非自动提交
Conn.setAutoCommit(false);
4、事务和ACID属性
A原子性 是一个整体,要么都成功。要么都失败。
C 一致性 事务执行之前状态是正确。 成功执行 第二个正确状态。如果执行失败。就回到之前状态。
I 隔离性 每个事务在它自己的空间发生,和其他发生在系统中的事务隔离。而且事务结果只有在它完成后才能看到。 通过加锁机制来实现
D 持久性 修改成功就会长久保留下来。
二、事务处理
1、set @@autocommit=0; sql语句
2、start transaction; 设置事务的开始点
3、执行事务。commit;是提交事务。表示正确执行。永久保存。
4、rollback; 回滚事务,撤销操作。回到原来状态。
5、设置保存点 savepoint 保存点名;
rollback work to savepoint s1; 回滚到保存点。提示:没有提交。还需要commit将以前的提交。
三、在Java中实现事务的操作。
Conn。SetAutoCommit(false); 修改提交方式,不自动提交
在try catch中 在try最后一句 表示没有异常。执行commit
有异常。 将rollback回滚事务放在catch块中。
代码: Connection con=null;
PreparedStatement pst=null;
SavePointsp=null;
Try{
Con=JdbcUtil.getConnection();
Con.setAutoCommit(false);
String sql=”delete fromstudent where id=1”;
Pst=con.preparedStatement(str);
System.out.println(“第一条sql语句”);
Pst.excuteUpdate();
//设置保存点
SavePointsp=con.setSavepoint();44eeeeeeeee
System.out.println(“第二条”);
Sql=”update student setname =’try’ where id=’asd’”
Pst=con.prepareStatement(sql);
Pst.executeUpdate();
Con.commit();//提交事务
System.out.println(“事务完成“);
}catch(SQLException e){
Try{
//con.rollback();
Con.rollback(sp); 返回到保存点
}catch(SQLException e1){
}
}finally{
Con.setAutoCommit(true);将提交方式设置回来
//释放资源
}
四、隔离级别
会出现脏读,不可重复读,幻读的情况
隔离级别为:
读未提交 ReadUncommitted 出现三个情况
读已提交 ReadCommitted 出现 不可重复读 幻读
可重复读 RepeatableRead 默认级别。 会出现幻读情况
可序列化 Serializable 什么都不会出现