15

Java事务解析(事务的基本操作+隔离的等级+事务的四大特性+事务的概念)

 3 years ago
source link: http://www.cnblogs.com/pjhaymy/p/13375831.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Java事务解析(事务的基本操作+隔离的等级+事务的四大特性+事务的概念)

什么是事务?

如果一个包含多个步骤的业务操作,这些操作被事务管理,那么这些操作要么同时成功要么同时失败

事务的四大特性(必须记住):

持久性:当事务回滚或者提交之后,数据库会持久化数据

一致性:事务操作前后,数据的总量不变

原子性:是不可分割的最小单位,不可分割,要么同时成功要么同时失败,不可分割

隔离性:各个事务之间相互独立

事务的基本操作:

开启事务:start transaction

回滚事务:Roolback

提交:commit;

事务提交的两种方式:

自动提交:

mysql中事务是默认自动提交的

比如我们执行一条DML(Data Manipulation Language),他会自动提交数据,将数据持久化到数据库中

手动提交:

Oracle数据库默认是手动提交的,

需要开启事务再手动提交

查看事务提交的方式:

zU7BnuY.png!web

可以看到mysql的默认提交方式是自动提交,-- 1 代表自动提交 0 代表手动提交

修改事务的提交方式:

set @@autocommit

22AZRzf.png!web 可以看到事务的提交方式被修改为手动提交

事务的隔离等级:

1

Read uncommitted:读未提交

产生的问题:脏读,不可重复读,幻读

2

Read commited:读已提交

产生问题:不可重复读,幻读

3

Repeatable read 可重复读(Mysql默认读法):

产生的问题:幻读

4

serialzable:串行化

可以解决所有问题

事务的隔离等级越高,安全等级也越高,但是效率越来越低

数据库查询隔离级别:

select @@tx_isolation

设置数据库的隔离等级:

select global transaction isolation level

什么是幻读,脏读,不可重复读

不可重复读:

不可重复读是指A事务读取了B事务已经提交的更改数据。假如A在取款事务的过程中,B往该账户转账100,A两次读取的余额发生不一致。

脏读:

A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作,这时候如果事务B回滚,那么A事务读到的数据是不被承认的。例如常见的取款事务和转账事务:

比如你去隔壁老王那借钱,你在他家的的时候看到他给你转的钱到账了,然后你就给他打了欠条,但是在你出了门,去银行取钱的时候,发现从老王 那借的钱人间蒸发了,因为老王使用了事务回滚,迷惑了你一番

7rUj2yY.png!web

qyUz6nQ.png!webzmyQV3Z.png!web

幻读:

A事务读取B事务提交的新增数据,会引发幻读问题。幻读一般发生在计算统计数据的事务中,例如银行系统在同一个事务中两次统计存款账户的总金额,在两次统计中,刚好新增了一个存款账户,存入了100,这时候两次统计的总金额不一致。

AZbyaeM.png!web 以上就是java事务的一些基础知识,如有错误还请各位批评指正,喜欢我的文章可以关注或者收藏


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK