后台(19)——事务Transaction

探索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–滑动冲突的产生及其处理


版权声明


事务简介

事务(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( )回滚事务
时间: 2025-01-24 00:55:52

后台(19)——事务Transaction的相关文章

Delphi FireDAC 下的 Sqlite(七) 备份、优化和事务(Transaction)

用 TFDSQLiteBackup 控件, 两三行代码即可完成 Sqlite 数据库的备份. procedure TForm1.Button1Click(Sender: TObject); begin {先初始化目标} FDConnection1.DriverName := 'SQLite'; FDConnection1.Params.Add('Database=C:\Temp\FDDemo_Back.sdb'); //如果不指定这个路径, 就是备份到内存 FDConnection1.Open(

详解Spring事务Transaction配置的五种注入方式

前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSource.TransactionManager这两部分只是会根据数据访问方式有所变化,

php中在PDO中使用事务(Transaction)_php技巧

并且在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操作. 如果执行成功, 那么这一系列操作都会永久有效. 事务很好的解决了在操作数据库的时候不同步的问题. 同时, 通过事务去执行大数据量的时候, 执行效率可以提高很多很多. 在 PDO 中, 事务已经显得非常简单. 下面一个基本的例子, 演示了向 SQLite 数据库插入 1000000 条数据, 并且在出错的时候回滚. 复制代码 代码如下: try { $conn = new PDO('sqlite:Transactioion

SQL基础-->数据库事务(TRANSACTION)

--====================== --SQL基础-->数据库事务 --======================   一.数据库事务     数据库事务是指作为单个逻辑工作单元执行的一系列操作,可以认为事务就是一组不可分割的SQL语句     二.数据库事务的ACID属性     原子性(atomic)     事务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行.       一致性(consistent)     事务在完成时,必须使所有的数据都保持一致状态

SQL基础15——数据库事务(TRANSACTION)

一.数据库事务     数据库事务是指作为单个逻辑工作单元执行的一系列操作,可以认为事务就是一组不可分割的SQL语句     二.数据库事务的ACID属性     原子性(atomic)      事务必须是原子工作单元:对于其数据修改,要么全都执行,要么全都不执行.       一致性(consistent)      事务在完成时,必须使所有的数据都保持一致状态.在相关数据库中,所有规则都必须应用于事务         的修改,以保持所有数据的完整性.事务结束时,所有的内部数据结构(如B 树

WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程

今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制.作为面向服务应用的开发平台,WCF也提供了对事物编程模型的支持..NET 2.0提供的System.Transactions类来开发事务应用程序.同样WCF也支持事务特性,WCF事务机制是什么,它与微软已有的技术如Microsoft 分布式事务协调器 (MSDTC)有何关系?与Enterpise S

WCF分布式开发常见错误(16):The Transaction has aborted,事务已经被中断

今天调试WCF事务代码遇到这个问题:The Transaction has aborted,事务已经被中断. 具体信息如下图: 开发常见错误(16):The Transaction has aborted,事务已经被中断-事务transaction"> 解决办法: 1.Transaction timed out 设置问题.增加配置代码火属性: <serviceBehaviors> <behavior name="WCFService.WCFServiceBeha

在SPRING中实现事务暂停的方法

摘要 Spring框架是一个流行的基于轻量级控制反转容器的Java/J2EE应用框架,尤其在数据访问和事务管理方面的能力是众所周知的.Spring的声明性事务分离可以应用到任何POJO目标对象,并且包含所有EJB基于容器管理事务中的已声明事务.后台的事务管理器支持简单的基于JDBC的事务和全功能的基于JTA的J2EE事务. 这篇文章详细的讨论了Spring的事务管理特性.重点是如何在使用JTA作为后台事务策略的基础上让POJO利用Spring的声明性事务,这也显示了Spring的事务服务可以无缝

JDBC事务管理及SavePoint示例

默认情况下,当我们创建一个数据库连接时,会运行在自动提交模式(Auto-commit)下.这意味着,任何时候我们执行一条SQL完成之后,事务都会自动提交.所以我们执行的每一条SQL都是一个事务,并且如果正在运行DML或者DDL语句,这些改变会在每一条SQL语句结束的时存入数据库.有时候我们想让一组SQL语句成为事务的一部分,那样我们就可以在所有语句运行成功的时候提交,并且如果出现任何异常,这些语句作为事务的一部分,我们可以选择将其全部回滚. 让我们通过一个简单的示例理解一下,这里使用JDBC的事