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对隔离级别的设置:
在开启事务之前设置。
网友评论