世界万事无简单一说, 每个事情基本上由多个小的事情来完成。有的事情会存在若小的事情不能同时完成的情况就取消所有的小的事情,直至都完成达到预期的效果才算完成!这样就用到了事务操作。在所有的sql语句完成之前,若发生异常,则让事务回滚到开始事务的时候,让事务结束;并且让已执行的sql语句作废。但是连接数据库的connnection与开启事务的connnection必须是一个。这样原来在dao层开启连接必须到service层一起执行了开启事务和处理异常。
一、事务:
一件事情有n个组成单元 :要不这n个组成单元同时成功, 要不n个单元就同时失败。就是将n个组成单元放到一个事务中!
二、mysql事务:
1、默认的事务:一条sql语句就是一个事务 。默认就开启事务并提交事务!
2、手动事务:
①、显示的开启一个事务:start transaction
此时进行的所有的修改都是内存里修改的,具体数据库内到底修改了没还是由是否提交来决定的!!!
当提交了就代表数据库修改了,当回滚了则没有修改!
但是需要注意的是无论数据库到底修改了没有,只要执行了SQL语句,在库内的表里的自增的序号会自动被占用了!!!
②、事务提交:commit
代表从开启事务到事务提交中间的所有的sql都认为有效! 真正的更新数据库!
③、事务的回滚:rollback
代表事务的回滚--在其之前的所有的操作都作废了!回滚到start的地方,同时当前的事务结束了!
三、JDBC事务操作:
1、默认是自动事务:
执行sql语句:executeUpdate() ---- 每执行一次executeUpdate方法 代表 事务自动提交(默认)
2、通过jdbc的API手动事务:
①、开启事务:conn.setAutoCommit(false);
此为设置为自动提交(改为false,也就是改为手动提交)
②、提交事务:conn.commit();
③、回滚事务:conn.rollback(); (都被封装成了方法)
注意:
控制事务的connnection必须是同一个!
执行sql的conn