`

SQL Server 中的事务

 
阅读更多

事务的含义:

事务要有非常明确的开始和结束点,SQL Server 中的每一条数据操作语句,例如SELECT、INSERT、UPDATE和DELETE都是隐式事务的一部分。即使只有一条语句,系统也会把这条语句当做一个事务,要么执行所有的语句,要么什么都不执行。

事务开始之后,事务所有的操作都会写到事务日志中,写到日志中的事务,一般有两种:一是针对数据的操作,例如插入、修改和删除,这些操作的对象是大量的数据;另一种是针对任务的操作,例如创建索引。当取消这些事务操作时,系统自动执行这些操作的反操作,保证系统的一致性。系统自动生成一个检查点机制,这个检查点周期的检查事务日志。如果在事务日志中事务全部完成,那么检查点事务日志中的事务提交到数据库中,并且在事务日志中做一个检查点提交标识;如果在事务日志中,事务没有完成,那么检查点不会将事务日志中的事务提交到数据库中,并且在事务日志中做一个检查点未提交的标识。事务的恢复及检查点保证了系统的完整和可恢复。


事务的属性:

事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有4个属性,称为原子性(Atomic)、 一致性(Consistent)、隔离性(Isolated)、持久性(Durable),简称ACID属性,只有这样才能构成一个事务。


原子性:
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:
在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性:
两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
持久性:
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新 以及修改的资料一次操作完毕,但实际上并不可行。

事务管理的常用语句:

BEGIN TRANSACTION——建立一个事务

COMMITTRANSACTION——提交事务
ROLLBACK TRANSACTION——事务失败时执行回滚操作
SAVE TRANSACTION——保存事务
BEGIN TRANSACTION 和COMMIT TRANSACTION同时使用,用来表示事务的开始和结束。


事务的隔离级别:

事务具有隔离性,不同事务中所使用的时间必须要和其他事务进行隔离,在同一时间可以有很多个事务正在处理数据,但是每个数据在同一时刻只能有一个事务进行操作。如果将数据锁定,使用数据的事务就必须要排队等待,这样可以防止多个事务互相影响。但是如果有几个事务因为锁定了自己的数据,同时又在等待其他事务释放数据,则造成死锁。
为了提高数据的并发使用效率,可以为事务在读取数据时设置隔离状态,SQL Server 中的事务隔离状态由低到高分为4个级别。

未授权读取

也称为读未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个数据则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

授权读取

,也称为读提交(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

可重复读取

可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

序列化

序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。


分享到:
评论

相关推荐

    sqlserver中事务

    事务的成功意味着所有操作都会被永久性地提交至数据库,反之,若事务中的任一操作失败,则整个事务都将被回滚,所有数据变更将被撤销,从而保证了数据库状态的原子性和一致性。 #### 事务的三种运行模式 事务在SQL...

    怎么理解SQL SERVER中事务隔离级别及相应封锁机制.pdf

    理解SQL Server中事务隔离级别及相应封锁机制 SQL Server中事务隔离级别是数据库管理系统中一个重要的概念,它决定了事务之间的并发执行和数据的一致性。本文将详细介绍SQL Server中事务隔离级别的概念、分类、特点...

    SQLServer处理事务日志文件过大方法

    在SQL Server数据库管理系统中,事务日志文件(Transaction Log File)是用于记录所有事务更改的关键组件之一。随着数据库活动的增加,特别是当数据库频繁执行事务时,事务日志文件可能会迅速增长至非常庞大的尺寸,...

    SQL Server 2000完结篇系列之三:数据并发-彻底掌握SQL Server 2000事务机制

    2. 显式事务:在显式事务中,开发人员通过BEGIN TRANSACTION、COMMIT TRANSACTION和ROLLBACK TRANSACTION语句来明确地开始、提交或回滚事务。这种方式提供了更精细的控制,尤其是在处理复杂的业务逻辑时。 3. ...

    SQL Server中事务和锁的管理.pdf

    锁机制是SQL Server用来防止并发事务中的冲突和不一致性的工具。它通过锁定数据库资源,比如行、页或表,来阻止其他事务对这些资源进行冲突性的操作。在执行数据修改操作时,锁会自动加到相关的数据资源上,并在事务...

    sqlserver嵌套事务总结

    该文档从sqlserver事务讲起,详述ACID,@@trancount,在嵌套事务中使用保存点,命名事务等

    SQLServer存储过程中事务的使用方法

    这标志着事务的开始,所有的SQL操作将在同一个事务中执行,直到事务被提交或回滚。 ```sql begin transaction ``` 2. **执行SQL操作**:在开启事务后,执行一系列的SQL操作,如插入、更新或删除数据。这里以一个...

    sql server事务日志解析工具

    每个 SQL Server 数据库都有事务日志,用于记录所有事务以及每个事务所做的数据库修改。 你是否想读取和分析SQL Server日志文件 (.ldf) ?正找不到合适的软件呢?以上一款强大的sql数据库日志分析工具,可以轻松打开...

    浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色 .docx

    - **原子性**:保证事务中的所有操作要么全部完成,要么全部不执行。 - **一致性**:事务完成后,系统必须处于一致的状态。 - **隔离性**:并发执行的事务之间不会互相干扰。 - **持久性**:一旦事务提交,其结果将...

    SQL SERVER中事务隔离级别的实例分析.pdf

    2. **不可重复读(Nonrepeatable Read)**:不可重复读是指在一个事务中,相同的查询在不同时间返回了不同的结果,通常是由于其他事务在这期间对数据进行了修改。例如,事务A首次读取某行数据,然后事务B修改了这行...

    sqlserver2000事务问题.txt

    - **禁用 AutoCommit 模式**:可以通过 `conn.setAutoCommit(false)` 来禁用 AutoCommit 模式,这使得后续的 SQL 语句将在一个手动管理的事务中执行,直到调用 `conn.commit()` 或 `conn.rollback()` 方法。...

    浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 .docx

    SQL Server中的事务日志是数据库管理系统的关键组成部分,它在确保数据的持久性和事务一致性方面扮演着核心角色。事务日志的物理结构主要由虚拟日志文件(Virtual Log Files, VLFs)组成,这些文件是日志文件的逻辑...

    SQLServer分布式事务服务器的配置.doc

    对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。 知识点:XACT_ABORT 设置可以控制事务中的错误处理机制。 5. MSDTC 设置 MSDTC 设置包括网络...

    SQLSERVER 事务日志详解

    本篇将深入探讨SQL Server事务日志的原理,以及如何利用`fn_dblog`这个系统存储过程来查询和解析事务日志。 事务日志是SQL Server中的一个关键组成部分,它跟踪数据库中每个事务的所有更改。每次数据修改时,这些...

    SQL server中的事务

    在SQL Server中,当事务操作完成并且数据一致性得到保证后,需要使用COMMIT语句来提交事务,这样事务中所做的更改才会被永久保存。如果在执行事务过程中遇到错误,可以使用ROLLBACK语句来回滚事务,撤销到事务开始...

    SQLServer 视图 事务 索引

    例如,如果你在事务中进行转账操作,只有当两个账户的扣款和存款都能成功时,事务才会提交;如果有任何错误,整个事务会被回滚,以保持数据的准确性。事务有四种隔离级别:读未提交(READ UNCOMMITTED)、读已提交...

    事务管理(二)——SQL SERVER的事务管理

    通过对这些脚本的执行和分析,可以深入理解SQL Server事务管理的机制和实际应用。 总之,SQL Server的事务管理涉及一系列复杂机制,包括事务的ACID属性、隔离级别选择、并发控制以及死锁的预防和解决。通过阅读博客...

    sql server 事务处理

    如果在事务中的任何操作失败,整个事务将被回滚,以保持数据库的稳定状态。 ### 一致性(Consistency) 事务完成后,数据库必须处于一致状态。这意味着所有规则和约束都得到遵守,数据的完整性得到维护。 ### 隔离...

    SQL Server -事务和游标

    1. 原子性:一个事务中的所有操作要么全部成功,要么全部失败,不允许部分完成。如果事务在执行过程中出现错误,系统将回滚到事务开始前的状态。 2. 一致性:事务执行前后,数据库必须保持一致状态,即所有事务都...

Global site tag (gtag.js) - Google Analytics