概念
在一个完整的业务逻辑中,所包含的所有小单元(SQL语句),要么同时成功,要么同时失败
实际运用中:必须要保证同一个事务中的所有小单元sql代码的指向,必须要在相同的连接对象上
事务四大特性
- 原子性:强调事务的不可分割
- 一致性:事务的执行的前后,数据的完整性保持一致,事务执行前和后数据的总和不变 :如转账业务,无论事务执行成功否,参与转账的两个账号余额之和应该是不变的。
- 隔离性:一个事务在执行的过程中,不应该受到其他事务的干扰。事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
- 持久性:事务一旦结束,数据就持久到数据库中
MySQL事务
在默认情况下,MySQL每执行一条SQL语句,都是一个单独的事务。如果需要在一个事务中包含多条SQL语句,那么需要开启事务和结束事务。
- 开启事务:start transaction
- 结束事务:commit或rollback
在执行SQL语句之前,先执行start transaction,这就开启了一个事务(事务的起点),然后可以去执行多条SQL语句,最后要结束事务,commit表示提交,即事务中的多条SQL语句所作出的影响会持久到数据库中;如果中途发生异常,则rollback,表示回滚到事务的起点,之前做的所有操作都被撤销了。
JDBC事务
- 在JDBC中处理事务,都是通过Connection完成的。
- 同一事务中所有的操作,都在使用同一个Connection对象
Connection的三个与事务有关方法:
- setAutoCommit(boolean):设置是否为自动提交事务,如果true(默认值为true)表示自动提交,也就是每条执行的SQL语句都是一个单独的事务,如果设置为false,那么相当于开启了事务了;con.setAutoCommit(false) 表示开