事务

1.逻辑上的一组操作,组成它的各个单元要么全成功,要么全失败。

2.数据库DTL语言:

start transaction开启事务

rollback回滚

commit提交

在start transaction和rollback或commit之间的语句,是在内存中运行的,并没有存盘,数据库中的数据不生变化。直到commit命令执行之后,操作才会在表上显示出来。一旦某一条语句执行失败,就会执行rollback命令,之前执行没失败的操作也全部作废。

3.事务的特性:

原子性:指事是个不可分割的工作单元,事务中的操作要么都成功,要么都失败。

一致型:事务必须使数据库从一个一致状态变到另一个一致状态。例如:转账前后总金额一致。

隔离性:多个用户并发访问数据库时,数据库为每一个用户开启的事务不能被其他事务的操作所干扰。多个并发事务之间要相互隔离。

持久性:事务一旦被提交,对数据库中数据的改变是永久性的,接下来即便数据库发生故障也不会对该操作有任何影响。

4.事务的隔离级别

赃读:一个事务读取到了另外一个事务未提交的数据。

不可重复读:在一个事务哪读取到表中的某一条记录,多次读取结果不同。(update)

虚读(幻读):在一个事务内读取到了别的事务插入读数据。(insert)

为了避免以上情况的发生,设置事务的隔离级别。

*1.READ UNCOMMITTED 三种都有可能发生

*2.READ COMMITTED  避免赃读  (oracle默认)

*4.REPEATABLE  READ  虚读有可能发生  (mysql默认)

*8.SERIALIZABLE  避免三种

级别越高,性能越低,数据越安全。用哪一种取决于数据库的访问量。实际开发中,用中间的两种。

5.JDBC对隔离级别的设置:

在开启事务之前设置。

你可能感兴趣的:(事务)