后台(19)——事务Transaction
2017-02-17 20:47
141 查看
探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
作者博客地址:http://blog.csdn.net/lfdfhl
在数据库中与事务相关的操作有:
开启事务:start transaction
提交事务:commit
回滚事务:rollback
事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如:两个账户相互转账,那么转账前和转账后的总金额不变。
隔离性
多个用户并发访问数据库时,数据库为每一个用户开启的事务不能被其他事务的操作数据所干扰;即多个并发事务之间要相互隔离。
持久性
事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响
事务的四大特性中原子性,一致性,持久性很好理解,在此不再赘述。
下面重点介绍一下事务的隔离级别。
在多个线程中各自开启事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。假如,事务不考虑隔离性可能会引发如下问题:
赃读
在一个事务中读取了另一个事务未提交的数据。
不可重复读
在一个事务内读取表中的某些数据,多次读取结果不同;即一个事务读取到了另一个事务提交后的数据。比如:开启事务后利用SQL语句查询数据,得到结果;立即再次查询得到的结果却与刚才不一样。通俗地说,不可重复读就是:自己的事务还没有提交,又读到了其它事务中执行了upate并提交的数据。
虚读
是指在一个事务内读取到了别的事务中执行insert并提交的数据,导致前后读取不一致。
数据库通过设置事务的隔离级别防止以上情况的发生,常用的事务级别有如下几种:
1、READ UNCOMMITTED
将事务级别设置为该级别后,赃读、不可重复读、虚读都有可能发生。
2、READ COMMITTED
将事务级别设置为该级别后,可避免赃读;但是不可重复读、虚读都有可能发生
3、REPEATABLE READ
将事务级别设置为该级别后,避免赃读、不可重复读;但是虚读有可能发生。
4、SERIALIZABLE
将事务级别设置为该级别后,可避免赃读、不可重复读以及虚读。
关于数据库的事务级别,请注意:
事务级别越高那么数据操作越安全但是操作性能越低
在MySQL中可利用SELECT @@TX_ISOLATION查看当前的事务隔离级别
在MySQL中可利用SET TRANSACTION ISOLATION LEVEL XXXXX 更改事务隔离级别
应在开启事务之前设置隔离级别
利用connection.setAutoCommit(false)开启事务
利用connection.commit( )提交事务
利用connection.rollback( )回滚事务
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制
Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南
自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理
版权声明
本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl
事务简介
事务(Transaction)是数据库操作中并发控制的基本单位。事务是一个操作序列,这个序列中的所有数据库操作要么都成功执行,要么都不执行,它是一个不可分割的工作单位。在数据库中与事务相关的操作有:
开启事务:start transaction
提交事务:commit
回滚事务:rollback
事务的特性
原子性事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如:两个账户相互转账,那么转账前和转账后的总金额不变。
隔离性
多个用户并发访问数据库时,数据库为每一个用户开启的事务不能被其他事务的操作数据所干扰;即多个并发事务之间要相互隔离。
持久性
事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响
事务的四大特性中原子性,一致性,持久性很好理解,在此不再赘述。
下面重点介绍一下事务的隔离级别。
在多个线程中各自开启事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。假如,事务不考虑隔离性可能会引发如下问题:
赃读
在一个事务中读取了另一个事务未提交的数据。
不可重复读
在一个事务内读取表中的某些数据,多次读取结果不同;即一个事务读取到了另一个事务提交后的数据。比如:开启事务后利用SQL语句查询数据,得到结果;立即再次查询得到的结果却与刚才不一样。通俗地说,不可重复读就是:自己的事务还没有提交,又读到了其它事务中执行了upate并提交的数据。
虚读
是指在一个事务内读取到了别的事务中执行insert并提交的数据,导致前后读取不一致。
数据库通过设置事务的隔离级别防止以上情况的发生,常用的事务级别有如下几种:
1、READ UNCOMMITTED
将事务级别设置为该级别后,赃读、不可重复读、虚读都有可能发生。
2、READ COMMITTED
将事务级别设置为该级别后,可避免赃读;但是不可重复读、虚读都有可能发生
3、REPEATABLE READ
将事务级别设置为该级别后,避免赃读、不可重复读;但是虚读有可能发生。
4、SERIALIZABLE
将事务级别设置为该级别后,可避免赃读、不可重复读以及虚读。
关于数据库的事务级别,请注意:
事务级别越高那么数据操作越安全但是操作性能越低
在MySQL中可利用SELECT @@TX_ISOLATION查看当前的事务隔离级别
在MySQL中可利用SET TRANSACTION ISOLATION LEVEL XXXXX 更改事务隔离级别
应在开启事务之前设置隔离级别
JDBC中控制事务以及操作事务
利用connection.setTransactionIsolation(int level)设置隔离级别利用connection.setAutoCommit(false)开启事务
利用connection.commit( )提交事务
利用connection.rollback( )回滚事务
相关文章推荐
- SQL Server数据库事务处理详解 TRANSACTION
- ORACLE中的自治事务 PRAGMA AUTONOMOUS_TRANSACTION
- Transaction(事务)
- Hibernate-Transaction(事务)
- 关于事务(transaction)
- 关于使用Transaction对于非数据库事务的操作
- C#中实现Transaction事务处理
- TPC(Transaction Processing Performance Council)-事务处理性能委员会
- 使用TransactionProxyFactoryBean代理事务
- 分布式事务 TCC-Transaction 源码解析 —— 事务存储器
- 通过后台事务来使单据提交工作流
- spring事务(Transaction)的七种事务传播行为及五种隔离级别
- 理解FlumeNG的batchSize和transactionCapacity参数和传输事务的原理 【转】
- django 中的transaction(事务管理)
- spring_hibernate_Transaction:事务管理
- 分布式事务 TCC-Transaction 源码分析 —— 事务恢复
- SSH框架中的transaction即事务边界的问题
- 分布式事务 TCC-Transaction 源码分析 —— 运维平台
- 分布式事务 TCC-Transaction 源码分析 —— Dubbo 支持
- oracle 自制事务 PRAGMA AUTONOMOUS_TRANSACTION