一、SQL Server事务的本质
• 什么是SQL Server数据库事务?
事务:是作为单个工作单元而执行的--系列操作,如查询和修改数据,甚至可能是修改数据定义。
事务:保持逻辑数据一致性与可恢复性,必不可少的利器。
• SQL Server数据库事务举例
在一个事务中,你写了2条sql语句,一条是修改订单表状态,一条是修改库存表库存-1 。 如果在修改订单表状态的时候出错,事务能够回滚,数据将恢复到没修改之前的数据状态,下面的修改库存也就不执行,这样确保你关系逻辑的一致,安全。• 阿笨对SQL Server事务一句话总结
即这一组命令要么都执行,要么都不执行,通俗的理解就是共同进退。
二、SQL Server事务分类
SQL Server定义事务边界的方式分为显式事务和隐式事务两种。
• 显式事务:明确指出事务的起止边界。如果不显式定义事务的边界,SQL Server 会默认把每个单独的语句作为-一个事务;换句话说,SQLServer默认在执行完每个语句之后就自动提交事务。
显示事务需要定义以BEGIN TRAN语句作为开始。如果想提交事务,则应该以COMMIT TRAN语句显式结束事务;如果不想提交事务(撤消事务中的修改),则应该以ROLLBACK TRAN语句显式结束事务。
• 隐式事务:SQL查询分析器中,当前会话默认就是为隐式事务。每执行一条DML操作,就直接提交到数据库保存。
三、SQL Server事务的小陷阱
下面的例子将两个INSERT语句封装在由BEGIN TRAN和COMMIT TRAN定义的一个显示事务边界中:
BEGIN TRAN;
INSERT INTO dbo. T1(keyco], col1, co12) VALUES(4, 101,'C);
INSERT INTO dbo. T1(keyco], col1, co12) VALUES(4, 101,'C);
COMMIT TRAN;
T-SQL使用下列语句来管理完整的事务(事务的基本三要素):
• 开始事务:BEGIN TRANSACTION
• 提交事务:COMMIT TRANSACTION
• 回滚(撤销)事务:ROLLBACK TRANSACTION
• 存储点语句:SAVE TRANSACTION(可选)
所谓事务存储点就是在事务过程当中插入若干个标记,当事务执行中出现错误时,可以不撤销整个事务,只是撤销部分事务,将事务退回到某个事物存储点。一旦事务提交或回滚,则事务结束。(备注:将事务回滚在初始状态成本有点大,那么关于事务使用存储点根据实际业务情况来判定是否使用。)
• 阿笨个人总结:
默认的隐式事务,在SQL Server查询分析器中每一个单独的语句就是一个事务,如果多行语句块需要包裹在一个事务中的话,则需要手动的开启显示事务。