JDBC事务

JDBC事务(事务的特性ACID点这)

1.1事务:

1、什么是事务
2、java中(jdbc)如何控制事务。
事务—重点
指的的逻辑上的一组(一组sql,insert update ,delete)操作,组成这组操作的各个单元(各个sql),要不全部成功,要么全部失败。

举例: 转账 a 给b 转账 100 a原来有1000 b原来也有1000
account 是一个表名 表示的 账务表,里面有人的信息,和人的金额。
update account set money=money-100 where name = a;
update account set money =money+100 where name=b;
假设:

update account set money=money-100 where name = a;
出现了异常。
update account set money =money+100 where name=b;

后果: a的余额是900 b的余额 1000

有了事务:

开启事务:
update account set money=money-100 where name = a;
出现了异常。 ---- 事务进行管理: 进行回滚: 更改的记录无效。
update account set money =money+100 where name=b;

此时:a的余额是1000 b的余额 1000

开启事务:
update account set money=money-100 where name = a;
update account set money =money+100 where name=b;
进行提交: 把更改的内容使之生效。

此时:a的余额是900 b的余额 1100

1.2mysql中的事务管理

mysql中,默认事务是自动提交的。一条sql一个事务。

开启事务
update
提交事务;

start transaction ---- 开启一个事务。以后的sql都在一个事务中。更改的内容不会自动提交。
rollback —事务的回滚—同时失败的情况。–事务结束,并且全部失败,数据回复到开始之前的状态
commit ----------事务的提交----同时成功—事务结束。全部成功。

----账务信息
create table account(
name varchar(10),
money double
);

insert into account(name,money) values(‘a’,1000);
insert into account(name,money) values(‘b’,1000);

去做a给b转100块。

-----mysql默认类似这样
start transaction ;
update account set money = money -100 where name = ‘a’;
commit;
start transaction ;
update account set money = money +100 where name = ‘b’;
commit;

----自身手动控制事务。
start transaction ;
update account set money = money -100 where name = ‘a’;

update account set money = money +100 where name = ‘b’;
commit;
1、事务的回滚
JDBC事务_第1张图片
2、事务的提交
JDBC事务_第2张图片

1.3jdbc中事务管理—重点

JDBC的事务管理,通过Connection 对象来完成的事务管理。
JDBC事务_第3张图片
void setAutoCommit(boolean autoCommit)
将此连接的自动提交模式设置为给定状态。

当我们传递的参数是 false的时候 相当于start transaction; 开启事务
当传递true的时候,自动提交。相当于一条sql语句一个事务。并且jdbc中。默认就是true。
开启事务:conn.setAutoCommit(false);

void rollback()
取消在当前事务中进行的所有更改
相当于rollback;表示的是事务结束。并且更改无效。把数据恢复到开启事务时候的状态。

void commit()
使所有上一次提交/回滚后进行的更改成为持久更改,
相当于commit 。表示事务的结束。并且数据更改有效

一旦数据commit之后,永久更改了。不能回滚了。

rollback 要放入到catch中。并且抓取异常的时候,尽可能抓取最大的(不是绝对)。
没有人为的控制事务的时候,情况
JDBC事务_第4张图片
手动控制事务:
JDBC事务_第5张图片
事务回滚点

案例:
一次性去执行多条(10000)sql语句的时候。一出现异常,10000条全部回滚。
每100条是合理的。
insert into dept(id)
insert into employee()
100,到100的时候,财务部,所有的员工都加载进去。

101—200 加入java 研发部。

JDBC提供事务回滚点接口 Savepoint, 如果在事务中进行savepoint设置,可以在事务回滚时,回滚到指定回滚点

API:
Savepoint sp = conn.setSavepoint(); ----设置是的回滚点。
Savepoint setSavepoint()
在当前事务中创建一个未命名的保存点 (savepoint),并返回表示它的新 Savepoint 对象。

Conn.rollback(sp);
void rollback(Savepoint savepoint)
取消所有设置给定 Savepoint 对象之后进行的更改。

把数据回滚到,指定的回滚点的位置。

Conn.commit(); //回滚后必须要提交

案例:向数据库发送10000条数据,每1000条是合理的。
JDBC事务_第6张图片

你可能感兴趣的:(JAVA,事务,JAVA,JDBC,MySQL)