事物
什么是事物?
一组操作,要么全执行,要么全不执行。
同生共死
事物的特性
原子性 : 事物的最小的操作单位。
一致性 : 要么全执行,要么全不执行,从一个状态到另一个状态总量不会发生改变。
隔离性 : 事物与事物之间是独立存在的,“互不干扰”
持久性 : 事物一旦提交,无法回滚,不能反向操作
隔离问题
脏读 : 事物A读物到了事物B未提交的数据
不可重复读 : 事物A在多次读取数据的时候,事物B修改了数据,导致事物A多次读取的数据是不一致的。
幻读 : 事物A在批量更改数据时,事物B插入了一条数据,事物A在查询操作结果会发现,有一条数据没有被改动
隔离级别
读未提交 什么都解决不了
不可重复读 解决脏读
可重复读 不可重复读 mysql
串行话 幻读
事物的操作
@Test
public void add() {
Connection conn =null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test4?
characterEncoding=utf-8", "root", "root");
//关闭事物的自动提交
conn.setAutoCommit(false);
PreparedStatement pst = conn.prepareStatement("update people set aslary=aslary-
1000 where id = ?");
pst.setInt(1,2);
pst.executeUpdate();
int i=10/0;
pst=conn.prepareStatement(" update people set aslary=aslary+1000 where id = ? ");
pst.setInt(1,3);
pst.executeUpdate();
//提交事物
conn.commit();
conn.close();
}catch (Exception e){
e.printStackTrace();
if(conn!=null){
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}