掌握了JDBC最基本的与数据库交互后,接下来,咱们要修炼进阶篇了,此篇涉及大量的专业名词,须要有必定天赋的修行者修炼,不过,我相信,可以轻松经过第一篇的你,绝对是那个骨骼精奇,天资聪慧的修行者~那么,咱们进入这次的修行把---JDBC的事务管理数据库
事务:在一个业务场景中,保持一系列操做的总体性,咱们称做事务~简单来说,在一系列的操做中,要么,全部操做都生效,要么全部操做都不生效,不存在某些操做生效,某些操做不生效的状况。举个例子~业务场景:小鱼儿转10定金子给花完好;涉及的操做:1.钱从小鱼儿的兜里转出~2.钱转入到花完好的兜中~,两个操做缺一不可,若是操做1在途中受阻,那么钱就会回到小鱼儿的兜中,只有这样,才能保证我业务操做的完整性。多线程
事务的特性:并发
一、原子性(atomicity):组成事务的语句造成了一个逻辑单元,不能只执行一部分;atom
二、一致性(consistency):在事务处理执行先后,数据库与理论值是一致的(数据库完整性约束);线程
三、隔离性(isolcation):一个事务处理和另外一个事务处理相互间互不影响;事务
四、持续性(durability):事务处理的效果可以被永久保存下来。ci
隔离级别:it
一、多线程并发执行可能会产生如下三个问题:io
脏读(dirtyreads):一个事务读取了另外一个事务未提交的并行事务写的数据;table
不可重复读(non-repeatablereads):一个事务从新读取前面读取过的数据,发现该数据已经被另外一个已提交的事务修改过;
幻读(phantomread):一个事务从新执行一个查询,返回一套符合条件的行,发现这些行由于最近提交的事务而发生了改变
二、隔离级别
读未提交(Read uncommitted):未解决
读已提交 (Readcommitted):已解决:脏读
可重复读 (Repeatableread):已解决:脏读,不可重复读
序列化 (Serializble):已解决:脏读,不可重复读,幻读
三、设置隔离级别
connection.setTransactionlsolation(Connection.事务级别)
MySql默认为度已提交;
基本操做:
一、connection.setAutCommit(false):关闭事务自动提交
二、connection.commit():手动提交事务
三、connection.rollback():事务回滚
补:撤销事务中的部分操做
SavePoint sp = connection.setSavepoint();:设置事务回滚点
connection.rollback(sp);
connection.commit();:最后不要忘了提交事务,不然前面须要提交保存的操做也将不会保存到数据库中
总之,事务就是为了保证咱们操做的一致性,完整性,一些列操做中,没有异常发生,咱们就看能够commit提交事务,只要有一处发生异常,那么就须要使用rollback回滚草错,本篇更注重理解,理解好事务的核心,在该使用的地方可以正确的使用事务~