1、使用 T-SQL语句来管理事务 开始事务:BEGIN TRANSACTION 提交事务:COMMIT TRANSACTION 回滚(撤销)事务:ROLLBACK TRANSACTION 2、判断某条语句执行是否出错 使用全局变量@@ERROR @@ERROR 只能判断当前一条 T-SQL 语句执行是否有错, 为了判断事务中所有 T-SQL 语句是否有错,我们需要对错误进行累计; 如: SET @errorSum=@errorSum+@@error 3、事务必须具备 ACID四个属性 原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的); 要么都执行,要么都不执行 一致性(Consistency):当事务完成时,数据必须处于一致状态 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是 独立的,它不应以任何方式依赖于或影响其他事务 永久性(Durability) :事务完成后,它对数据库的修改被永久保持,事务日志能够保持 事务的永久性 4、事务的分类 显示事务:用 BEGIN TRANSACTION明确指定事务的开始,这是最常用的事务类型 隐性事务:通过设置 SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置 为打开,下一个语句自动启动一个新事务。当该事务完成时,再下一个 T-SQL 语句又将启 动一个新事务 自动提交事务:这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语句视为一个 事务,如果成功执行,则自动提交;如果错误,则自动回滚 1、准备数据库ACCP if exists (select name from sys.databases where name='accp') drop database accp go create database accp go use accp go 2、创建表 create table t1 ( tid int not null, sid int not null ) go insert into t1 values(101,201) insert into t1 values(102,202) insert into t1 values(103,203) go 1、开/关隐式事务set implicit_transactions off(默认值)/on begin transaction st01 select * from t1 insert into t1 values (101,201) select * from t1 save transaction st02 insert into t1 values (102,202) select * from t1 save transaction st03 delete from t1 select * from t1 save transaction st04 rollback transaction st03 select * from t1 rollback transaction st02 select * from t1 rollback transaction st01 select * from t1 go 2、回滚rollback 提交commit truncate table t1 go alter table t1 add constraint pk01 primary key(sid) go declare @eor int set @eor=0 begin tran insert into t1 values (101,201) set @eor=@eor+@@error insert into t1 values (101,202) set @eor=@eor+@@error if @eor<>0 begin print 'wrong' rollback end else begin print 'ok' commit end go select * from t1 go