SELECT和一次的INSERT/DELETE/UPDATE需要用事物管理?

数据库事务是确保数据一致性的关键,包括原子性、一致性、隔离性和持久性四个属性。事务可以通过显式、自动提交或隐式方式启动,并通过COMMIT或ROLLBACK来结束。在讨论中,是否对SELECT使用事务取决于具体需求和个人选择。
摘要由CSDN通过智能技术生成

 SELECT和一次的INSERT/DELETE/UPDATE需要用事物管理?

 

事务(数据库引擎)

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

原子性

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

一致性

事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。

隔离

由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。

持久性

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

控制事务(数据库引擎)

应用程序主要通过指定事务启动和结束的时间来控制事务。可以使用 Transact-SQL 语句或数据库应用程序编程接口 (API) 函数来指定这些时间。系统还必须能够正确处理那些在事务完成之前便终止事务的错误。

默认情况下,事务按连接级别进行管理。在一个连接上启动一个事务后,该事务结束之前,在该连接上执行的所有 Transact-SQL 语句都是该事务的一部分。但是,在多个活动的结果集 (MARS) 会话中,Transact-SQL 显式或隐式事务将变成批范围的事务,这种事务按批处理级别进行管理。当批处理完成时,如果批范围的事务还没有提交或回滚,SQL Server 将自动回滚该事务。

1、启动事务

显式事务

通过 API 函数或通过发出 Transact-SQL BEGIN TRANSACTION 语句来显式启动事务。

自动提交事务

数据库引擎的默认模式。每个单独的 Transact-SQL 语句都在其完成后提交。不必指定任何语句来控制事务。

隐式事务

通过 API 函数或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开。下一个语句自动启动一个新事务。当该事务完成时,下一个 Transact-SQL 语句又将启动一个新事务。

2、结束事务

您可以使用 COMMIT ROLLBACK 语句,或者通过 API 函数来结束事务。

COMMIT

如果事务成功,则提交。COMMIT 语句保证事务的所有修改在数据库中都永久有效。COMMIT 语句还释放事务使用的资源(例如,锁)。

ROLLBACK

如果事务中出现错误,或用户决定取消事务,则回滚该事务。ROLLBACK 语句通过将数据返回到它在事务开始时所处的状态,来取消事务中的所有修改。ROLLBACK 还释放事务占用的资源。在程序中可以通过捕获异常(例外)监测事务。

 

http://www.javaeye.com/topic/1603?page=1上看到的一些评论,这里摘录下来:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值