1、事务
也是数据库事务,就是对数据执行的一组操作,这些操作包括数据的增添、查询、删除和更改。事务的功能就是判断多个连续操作全部执行的结果,结果只有两种:事务完成和事务失败。当事务完成或异常中断时,事务就会回滚,恢复到未执行任何数据操作的最初状态。
2、事务的ACID特性
1. 原子性(Atomicity)
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
例如:银行刷卡业务,当消费的时候A顾客的卡钱减少,然后B商城的账户加钱,只有当这2个操作都成功的时候才可以进行提交,否则都必须回滚。这就是事务的原子性,因为这2个操作不可以分开。
2. 一致性(Consistency)
在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
例如:有表A和表B,表A中的一个字段aa是表B中bb字段的外键,并且bb字段是必填的,当在B表中插入数据的时候如果bb字段的值在A表中没有,则事务必须回滚否则会破坏数据库的完整性约束。
3. 隔离性(Isolation)
两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
例如:A顾客银行卡刷的钱与B顾客互相不影响。
4. 持久性(Durability)
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚
例如:在A顾客消费成功后,银行卡的钱不可以被回滚。
3、JDBC的数据隔离级别
对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:
脏读(dirty read): 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.(一个事务读取了另一个事务尚未提交的数据)
不可重复读(non-repeatable read): 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.(一个事务的操作导致另一个事务前后两次读取到不同的数据)
幻读(phantom read): 对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.(一个事务的操作导致另一个事务前后两次查询的结果数据量不同)
数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题.
一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱。
数据库提供的 4 种事务隔离级别:
4、锁LOCK
使用锁的目的是什么:
为了解决多用户环境下并发操作相同的资源而造成的错误修改数据的问题。单用户环境下不需要考虑锁,因为所有操作都是串行的。
锁的分类http://www.360doc.com/content/15/0115/15/14697932_441066763.shtml