search
HomeDatabaseMysql Tutorial 什么是数据库事务

什么是数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作。 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: 更新客户所购商品的库存信息 保存客户付款信息--可能包括与银行系统的交互 生成订单并且保存到数据库中 更新用户

什么是数据库事务

 

  数据库事务是指作为单个逻辑工作单元执行的一系列操作。

 

  设想网上购物的一次交易,服务器空间,其付款过程至少包括以下几步数据库操作:

 

  · 更新客户所购商品的库存信息

 

  · 保存客户付款信息--可能包括与银行系统的交互

 

  · 生成订单并且保存到数据库中

 

  · 更新用户相关信息,例如购物数量等等

 

  正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果在这一系列过程中任何一个环节出了差错,例如在更新商品库存信息时发生异常、该顾客银行帐户存款不足等,都将导致交易失败。一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,比如最后一步更新用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态--库存信息没有被更新、用户也没有付款,订单也没有生成。否则,数据库的信息将会一片混乱而不可预测。

 

  数据库事务正是用来保证这种情况下交易的平稳性和可预测性的技术。

 

  数据库事务的ACID属性

 

  事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性:

 

  · 原子性

 

  事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。如果系统只执行这些操作的一个子集,则可能会破坏事务的总体目标。原子性消除了系统处理操作子集的可能性。

 

  · 一致性

 

  事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。某些维护一致性的责任由应用程序开发人员承担,他们必须确保应用程序已强制所有已知的完整性约束。例如,当开发用于转帐的应用程序时,应避免在转帐过程中任意移动小数点。

 

  · 隔离性

 

  由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。当事务可序列化时将获得最高的隔离级别。在此级别上,从一组可并行执行的事务获得的结果与通过连续运行每个事务所获得的结果相同。由于高度隔离会限制可并行执行的事务数,所以一些应用程序降低隔离级别以换取更大的吞吐量。

 

  · 持久性

 

   事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。

 

  DBMS的责任和我们的任务

 

  企业级的数据库管理系统(DBMS)都有责任提供一种保证事务的物理完整性的机制。就常用的SQL Server2000系统而言,它具备锁定设备隔离事务、记录设备保证事务持久性等机制。因此,我们不必关心数据库事务的物理完整性,而应该关注在什么情况下使用数据库事务、事务对性能的影响,如何使用事务等等。

 

  本文将涉及到在.net框架下使用C#语言操纵数据库事务的各个方面。

 

  体验SQL语言的事务机制

 

  作为大型的企业级数据库,SQL Server2000对事务提供了很好的支持。我们可以使用SQL语句来定义、提交以及回滚一个事务。

 

  如下所示的SQL代码定义了一个事务,并且命名为"MyTransaction"(限于篇幅,本文并不讨论如何编写SQL语言程序,请读者自行参考相关书籍):

 

  DECLARE @TranName VARCHAR(20)

SELECT @TranName = 'MyTransaction'

BEGIN TRANSACTION @TranNameGOUSE pubs

GO

UPDATE roysched

SET royalty = royalty * 1.10

WHERE title_id LIKE 'Pc%'

GO

COMMIT TRANSACTION MyTransaction

GO

 

  这里用到了SQL Server2000自带的示例数据库pubs,提交事务后,将为所有畅销计算机书籍支付的版税增加 10%。

 

  打开SQL Server2000的查询分析器,选择pubs数据库,然后运行这段程序,结果显而易见。

 

  可是如何在C#程序中运行呢?我们记得在普通的SQL查询中,一般需要把查询语句赋值给SalCommand.CommandText属性,这里也就像普通的SQL查询语句一样,将这些语句赋给SqlCommand.CommandText属性即可。要注意的一点是,其中的"GO"语句标志着SQL批处理的结束,编写SQL脚本是需要的,但是在这里是不必要的。我们可以编写如下的程序来验证这个想法:

 

  //TranSql.csusing System;

using System.Data;

using System.Data.SqlClient;

namespace Aspcn

{

 public class DbTranSql

 {

  file://将事务放到SQL Server中执行

  public void DoTran()

  {

   file://建立连接并打开

   SqlConnection myConn=GetConn();myConn.Open();

   SqlCommand myComm=new SqlCommand();

   try

   {

    myComm.Connection=myConn;

    myComm.CommandText="DECLARE @TranName VARCHAR(20) ";

    myComm.CommandText+="SELECT @TranName = 'MyTransaction' ";

    myComm.CommandText+="BEGIN TRANSACTION @TranName ";

    myComm.CommandText+="USE pubs ";

    myComm.CommandText+="UPDATE roysched SET royalty = royalty * 1.10 WHERE title_id LIKE 'Pc%' ";

    myComm.CommandText+="COMMIT TRANSACTION MyTransaction ";

    myComm.ExecuteNonQuery();

   }

   catch(Exception err)

   {

    throw new ApplicationException("事务操作出错,系统信息:"+err.Message);

   }

   finally

   {

    myConn.Close();

   }

  }

  file://获取数据连接

  private SqlConnection GetConn()

  {

   string strSql="Data Source=localhost;Integrated Security=SSPI;user id=sa;password=";

   SqlConnection myConn=new SqlConnection(strSql);

   return myConn;

  }

 }

 public class Test

 {

  public static void Main()

  {

   DbTranSql tranTest=new DbTranSql();

   tranTest.DoTran();

   Console.WriteLine("事务处理已经成功完成。");

   Console.ReadLine();

  }

 }

}

 

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
如何在技嘉主板上设置键盘启动功能 (技嘉主板启用键盘开机方式)如何在技嘉主板上设置键盘启动功能 (技嘉主板启用键盘开机方式)Dec 31, 2023 pm 05:15 PM

技嘉的主板怎么设置键盘开机首先,要支持键盘开机,一定是PS2键盘!!设置步骤如下:第一步:开机按Del或者F2进入bios,到bios的Advanced(高级)模式普通主板默认进入主板的EZ(简易)模式,需要按F7切换到高级模式,ROG系列主板默认进入bios的高级模式(我们用简体中文来示范)第二步:选择到——【高级】——【高级电源管理(APM)】第三步:找到选项【由PS2键盘唤醒】第四步:这个选项默认是Disabled(关闭)的,下拉之后可以看到三种不同的设置选择,分别是按【空格键】开机、按组

i7 3770的最佳搭配显卡是什么?i7 3770的最佳搭配显卡是什么?Dec 29, 2023 am 09:12 AM

酷睿i73770配什么显卡好啊RTX3070是一款非常强大的显卡,它具有出色的性能和先进的技术。无论是玩游戏、渲染图形还是进行机器学习,RTX3070都能轻松应对。它采用了NVIDIA的Ampere架构,拥有5888个CUDA核心和8GB的GDDR6内存,能够提供流畅的游戏体验和高品质的图形效果。RTX3070还支持光线追踪技术,能够呈现逼真的光影效果。总之,RTX3070是一款强大而先进的显卡,适合那些追求高性能和高品质的用户使用。RTX3070是一款NVIDIA系列的显卡。采用第2代NVID

选择适合音乐生的平板电脑选择适合音乐生的平板电脑Jan 10, 2024 pm 10:09 PM

音乐生用什么平板合适华为的ipad中的12.9寸音响是一款非常好的产品。它配备了四个扬声器,音效非常出色。而且,它属于pro系列,相比其他款式稍微更好一些。总体来说,ipadpro是一款非常优秀的产品。这款mini4手机的喇叭声音较小,效果一般般。不能用来外放音乐,还是需要依靠耳机来享受音乐。耳机音质好的会有稍微好一些的效果,而便宜的三四十元的耳机就无法满足要求了。钢琴电子谱用什么平板如果您想购买一台10寸以上的iPad,我推荐使用两款应用程序,分别是Henle和Piascore。Henle提供

cortana的功能是什么?cortana的功能是什么?Jan 15, 2024 pm 10:15 PM

在使用微软公司开发的Windows10操作系统过程中,不少使用者对于其中名为Cortana的全新技术感到好奇和疑惑,Cortana在中文语境中的正式称呼为“小娜”,实际上是Windows10系统内置的一款人工智能(AIassistant)服务程序cortana小娜常见问题及解决方法怎么开启小娜没反应解决步骤不支持中国解决方法搜索框放到cortana里的方法cortana是什么软件答:"Cortana小娜"是由微软公司精心打造的一款云端平台个人智能助手,具备登陆与非登陆两种使用模式。当您处于登录状

选择适合您的RX580的驱动版本选择适合您的RX580的驱动版本Dec 29, 2023 pm 05:34 PM

rx5808g安装什么驱动好20.5.1和20.4.2WHQL是指软件或驱动程序的版本号。这些版本号通常用于标识软件或驱动程序的更新或修复。在计算机领域中,WHQL代表Windows硬件质量实验室,它是微软公司用来测试和验证硬件和驱动程序的合规性和稳定性的机构。因此,20.5.1和20.4.2WHQL表示这些软件或驱动程序已经通过了微软的测试和验证,可以安全地使用在Windows操作系统中。AMDrx580显卡相对稳定驱动20.5.1和20.4.2WHQL是指软件或驱动程序的版本号。这些版本号通

i34150搭配1G独显适合玩哪些游戏(i34150适用于哪些游戏)i34150搭配1G独显适合玩哪些游戏(i34150适用于哪些游戏)Jan 05, 2024 pm 08:24 PM

i34150搭配1G独显能玩哪些游戏能玩lol等小游戏。GTX750和GTX750TI是非常合适的显卡选择。如果只是玩一些小游戏或者不玩游戏,建议使用i34150的集成显卡就可以了。一般来说,显卡和处理器的搭配差价并不是很大,所以选择合理的搭配是很重要的。如果需要2G显存,推荐选择GTX750TI;如果只需要1G显存,直接选择GTX750即可。GTX750TI可以看作是GTX750的增强版本,具有超频功能。i34150可以搭配什么显卡根据需求,如果你打算玩单机游戏,建议你考虑更换显卡。你可以选择

C语言中的Calloc是什么?C语言中的Calloc是什么?Sep 10, 2023 pm 07:45 PM

C库内存分配函数void*calloc(size_tnitems,size_tsize)分配所请求的内存并返回指向它的指针。malloc和calloc的区别在于malloc不设置内存为零,而calloc将分配的内存设置为零。内存分配函数内存可以通过两种方式分配,如下所述-编译时分配内存后,执行期间不能更改。就会出现内存不足或者浪费的问题。解决方案是动态创建内存,即在程序执行过程中根据用户的要求创建内存。标准用于动态内存管理的库函数如下:-malloc()calloc()realloc()free

实现流畅运行CAD所需的配置是什么?实现流畅运行CAD所需的配置是什么?Jan 01, 2024 pm 07:17 PM

流畅使用cad需要什么配置要想顺利运用CAD软件,需要满足以下配置要求:处理器要求:为了能够流畅运行《文字玩出花》,您需要至少配备一台IntelCorei5或AMDRyzen5以上的处理器。当然,如果您选择更高性能的处理器,将能够获得更快的处理速度和更好的性能。内存是计算机中一个非常重要的组件,它对于电脑的性能和使用体验有着直接的影响。一般来说,我们推荐至少8GB的内存,这样可以满足大部分日常使用的需求。但是,为了获得更好的性能和更流畅的使用体验,建议选择16GB或以上的内存配置。这样可以确保在

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools