数据库事务的四个特性(caid)

事务的四个特性(caid):

原子性:要么全部成功commit,要么全部失败rollback.

一致性:rollback后的数据和原来的一致。

隔离性:事务和事务之间不干扰。一个事务必须与另外一个事务的执行结果隔离开。

持久性:执行成功。持久化数据。


事务和锁:

数据库操作都会产生锁,分为共享锁(select语句产生)和排他锁(dml语句)。一个事务中的语句执行完成后,在commit之后,语句影响的表记录才可以解锁。

如果没有定义事务隔离级别因此多个事务操作同一条数据可能会违反事务的caid特性。存在下面2个问题:

1)脏读取:

一个事务读取另外一个尚未提交的数据,然后第二个事务回滚了,那么第一个事务读取的就是无效的数据。

2)丢失数据修改:两个事务同时对一条数据修改,一个先提交,一个后提交,则先提交的事务的修改数据无效。


事务的属性:

1)事务的传播属性

设置事务的属性,来决定方法用不用事务,如何用。

2)事务的隔离级别

ISOLATION_DEFAULT 

使用数据库默认的隔离级别

ISOLATION_COMMITTED 

允许读取其他并发事务已经提交的更新(防此脏读)

ISOLATION_READ_UNCOMMITTED 

允许读取其他并发事务还未提交的更新,会导致事务之                间的3个缺陷发生,这是速度最快的一个隔离级别,但同                时它的隔离级别也是最低

ISOLATION_REPEATABLE_READ 

除非事务自身修改了数据,否则规定事务多次重复读取        数据必须相同(防此脏读,不可重复读)

ISOLATION_SERIALIZABLE 

这是最高的隔离级别,它可以防此脏读,不可重复读和        幻读等问题,但因其侵占式的数据记录完全锁定,导致 

它影响事务的性能,成为隔离级别中最展慢的一个。 

3)事务只读

PROPAGATION_REQUIRED,readOnly 

用于提升只读操作的效率。

4)事务超时

    PROPAGATION_REGUIRED,timeout_5,readOnly

超过5s,没有回应则,将事务回滚。


常用连接池: 单线程 apache dbcp :org.apache.commons.dbcp.BasicDataSource

兼容dbcp且处理高并发的   tomcat pool jdbc: org.apache.tomcat.jdbc.pool.DataSourc

声明式事务:

spring 用aop在方法执行前开启一个事务,顺利执行完commit,异常则rollback。所以不用在方法里面来开启和关闭事务。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子...
    沉默剑士阅读 12,130评论 0 16
  • 本文包括:1、事务概念2、MySQL管理事务3、JDBC控制事务进程4、事务的特性(ACID)5、事务的隔离级别6...
    廖少少阅读 4,282评论 0 3
  • 我在河边静静的看你,静静的看着你走过了春夏秋冬…… 时光对他而言是缓慢的,像一条静静流淌的河流。 112年后的今天...
    一梦异时空阅读 1,488评论 0 0
  • 25岁,在没有期待的时节里悄悄到来,没有工作,没有伴侣,一身顽疾。姑娘,你25岁了,可你活的还像个孩子。 常常赞叹...
    默三也阅读 1,859评论 0 0
  • 直面问题使人痛苦,若不解决,阻碍心智成熟,现在不谋求解决问题,将来的痛苦会更大,延续的时间也更长。 保持平衡自律是...
    墙上的向日葵_阅读 1,183评论 0 0