事务
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(面):
原子性:指的是事务中包含的逻辑不可分割
一致性:指的是事务执行前后,数据的完整性一致
隔离性:事务在执行期间不应该受到其他事务的影响
持久性:事务执行结束,事务应该永久保存到磁盘上。