(二)事务的基本操作
1.定义事务的开始
BEGIN TRAN[SACTION] 事务名
2.提交事务
COMMIT TRAN[SACTION] 事务名
3.保存事务
SAVE TRAN[SACTION] 保存点
4.回滚事务
ROLLBACK TRAN[SACTION] 事务名|保存点
(三)事务管理中常用的全局变量
在事务管理中,常用全局变量@@error和@@rowcount。
@@ERROR:返回最近一次执行的出错语句引发的错误号,返回值为0时表示未出错。
@@ROWCOUNT:返回事务中已执行语句所影响的数据行数。
【例】定义事务,使事务回滚到指定的保存点,分批执行,观察执行的过程。T-SQL语句如下:
USE 教务数据库
GO
--检查当前表中的结果,如图-7所示
SELECT times=0, * FROM 学生表
GO
--显式事务开始
BEGIN TRANSACTION demo
INSERT 学生表(学号,姓名) VALUES('201906006','林小明')
SAVE TRANSACTION save_demo
INSERT 学生表(学号,姓名) VALUES('201906007','谢芳芳')
-- (‘201906006’,‘林小明’) ,('201906007','谢芳芳') 都被插入,如图所示
SELECT times=1, * FROM 学生表
GO
--回滚部分事务
ROLLBACK TRANSACTION save_demo
-- ('201906007','谢芳芳') 被撤销不存在,如图所示
SELECT times=2, * FROM 学生表
GO
--回滚整个事务
ROLLBACK TRANSACTION
-- (‘201906006’,‘林小明’) 被撤销不存在,如图所示
SELECT times=3, * FROM 学生表
四 、事务操作的原则
事务对SQL Server固然非常重要,但在实际操
事务对SQL Server固然非常重要,但在实际操作中还要遵循以下一些重要的原则:
(1)事务要尽可能简短。事务在启动之后,数据库管理系统会在事务结束之前保留很多资源,以保证事务的原子性、一致性、隔离性和持久性,如果在事务中还要修改数据,数据管理系统还会使用锁来保护修改过的行,此时其他事务不能对这些进行控制,直到事务结束。在多用户系统中,这种过大资源的占有和过长时间的锁定,将是不能忍受的。
(2)在事务中访问的数据量要尽量最少。由于事务会锁定记录,访问的数据量越少,锁定的行数就越少,这样事务之间的争夺就越少。
(3)浏览数据时尽量不要打开事务。如果只是浏览数据,尽可能不要打开事务,避免占用过量资源。
(4)在事务处理期间尽量不要请求用户输入。因为在事务处理期间,事务占用的所有资源都会保留相当长的时间,如果还要等待用户输入,很有可能会造成阻塞。