哒哒哒~~今天说 事务的隔离级别和传播特性
正所谓在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句。当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交。
事务的ACID属性
- 原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,
要么都不发生。 - 一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(数据不被破坏) - 隔离性(Isolation)
事务的隔离性是指一个事务的执行不能被其他事务干扰. - 持久性(Durability)
持久性是指一个事务一旦被提交,
它对数据库中数据的改变就是永久性的.
在JDBC中
事务默认是自动提交的
每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,而不能回滚
为了让多个 SQL 语句作为一个事务执行:
- 执行语句前调用 Connection 对象的 setAutoCommit(false);以取消自动提交事务
- 在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务
- 在出现异常时,调用 rollback(); 方法回滚事务。
五个事务隔级别分别为:lsolation的属性值
- default
默认的事务隔离级别 - read_uncommitted
读未提交,一个事务可以操作另外一个未提交的事务,不能避免脏读,不可重复读,幻读,隔离级别最低,并发性 能最高 - read_committed
读已提交,一个事务不可以操作另外一个未提交的事务, 能防止脏读,不能避免不可重复读,幻读。 - repeatable_read
能够避免脏读,不可重复读,不能避免幻读 - serializable
隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。
七个事务的传播行为
- propagation_required
如果一个事务存在,则支持当前事务,如果不存在,则创建新的事务 - propagation_supports
如果一个事务存在,则支持当前事务,如果不存在,则非事务的方法运行 - propagation_mendatory
如果一个事务存在,则支持当前事务,如果存在,则抛出异常 - propagation_requires_new
总是要开启一个新的事务,如果事务存在,将该事务挂起 - propagation_not_supported
总是非事务方法运行,并挂起所有的事务 - propagation_never
总是非事务方法运行,如果事务存在则抛出异常 - propagation_nested
某一个事务存在,则运行在一个嵌套的事务中