十二 事务

事务

transaction,指一组操作,里面包含许多单一逻辑,只要一个逻辑没有执行成功,那么都算失败。所有的数据都回到最初的状态(回滚)。

为什么要有事务?

确保逻辑的成功,例子:银行转账

事务的开始和结束:start transaction --> commit/rollback;

测试事务:

代码里面的事务,主要是针对连接

  • 关闭自动提交:conn,setAutoCommit(false);
  • 提交:conn.commit , 一旦提交,数据库里面的数据会发生变化
  • 回滚:conn.rollback   让上次执行的操作无效
public class TestDemo {

    @Test
    public void transaction()   {
         Connection conn = null;
         PreparedStatement ps = null;
         ResultSet rs = null;
        try {    
            conn = JDBCUtil.getConn();
            //连接,关闭事务默认自动提交
            conn.setAutoCommit(false);
            String sql = "update account set money = money - ? where id = ?";
            ps  =  conn.prepareStatement(sql); 
            //给id为1的减100
            ps.setInt(1, 100);
            ps.setInt(2, 1);
            ps.executeUpdate();
            
//            int a = 10/0;
            
            //给id为2 的加100
            ps.setInt(1, -100);
            ps.setInt(2, 2);
            ps.executeUpdate();
            
            //成功则提交事务
            conn.commit();
        /*    while(rs.next()){
              System.out.println(rs.getString("name")+":"+rs.getDouble("money"));
              }*/
        } catch (SQLException e) {
            //失败则回滚
            try {
                conn.rollback();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            JDBCUtil.release(conn, ps, rs);
        }
          
          
    }
}

事务的特点ACID(面):

原子性:指的是事务中包含的逻辑不可分割

一致性:指的是事务执行前后,数据的完整性一致

隔离性:事务在执行期间不应该受到其他事务的影响

持久性:事务执行结束,事务应该永久保存到磁盘上。

安全问题&隔离级别(面):

猜你喜欢

转载自www.cnblogs.com/ltfxy/p/10226566.html