数据库事物 事务机制 项目中什么时候需要用到事物?
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
使用事务可以保证你的操作具有原子性,一致性。比如我更新数据的几张表,我的目的肯定是更新这几张表全成功,要么全失败,我不能一部分成功一部分失败,这样关联就乱了。咱们我们就可以使用事务来保证。他可以使得你这一系列的对数据的操作要么全成功,要么就是全失败,其中一个操作失败就全失败!
最常用到事务的就是对数据库的操作!
数据库事务是指作为单个逻辑工作单元执行的一系列操作。
设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作:
· 更新客户所购商品的库存信息
· 保存客户付款信息--可能包括与银行系统的交互
· 生成订单并且保存到数据库中
· 更新用户相关信息,例如购物数量等等
正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果在这一系列过程中任何一个环节出了差错,例如在更新商品库存信息时发生异常、该顾客银行帐户存款不足等,都将导致交易失败。一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,比如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态--库存信息没有被更新、用户也没有付款,订单也没有生成。否则,数据库的信息将会一片混乱而不可预测。
为了兼顾并发效率和异常控制,在标准SQL规范中,定义了4个事务隔
离级别,(ORACLE和SQLSERER对标准隔离级别有不同的实现 )
Read Uncommitted:
直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别
的事务可以读到这个改变.这是很不安全的.
Read Committed:
直译就是"读提交",意思就是语句提交以后即执行了COMMIT以后
别的事务就能读到这个改变.
Repeatable Read:
直译就是"可以重复读",这是说在同一个事务里面先后执行同一个
查询语句的时候,得到的结果是一样的.
Serializable:
直译就是"序列化",意思是说这个事务执行的时候不允许别的事务
并发执行.
隔离级别 一般有数据库默认就行了! 不需要去管的!
这是事务的隔离级别介绍,[url]http://baike.baidu.com/view/2943500.htm[/url],你看看,我说也不一定有这个说的好。
设置隔离级别通过Connection.setTransactionIsolation(int level)函数设置,这是JDBC上的。level的常量定义也在Connection接口中。