http://blog.sina.com.cn/s/blog_60a469490100lwim.html
事务的定义:作为一个逻辑单元进行操作的一系列动作。
事务的四个特性:ACID
即
原子性 - 事务中的所有动作作为一个单元来执行,要么全部执行,要么全部不执行。(下面的例子即说明了这个问题)
一致性 - 事务执行前和执行后数据库必须处于一致性的状态(数据库满足所有完整性的约束则说明,数据库是一致的)
隔离性 - 事务视数据库为一个一致的状态,事务操作的对象是一致的数据,各事务之间互不影响,它们是依次执行的。 (就事务之间)
永久性 - 即事务执行的结果是永久保存的。
(Four key properties that are abbreviated ACID and ACID is an acronym ([ˈækrəˌnɪm])
事务的关键字:BEGIN TRAN/TRANSACTION; COMMIT TRAN/TRANSACTION; ROLLBACK TRAN/TRANSACTION
最简单的事务 - 更新语句
UPDATE tableA SET columnA = xxxx WHERE columnB xxxxx
语句的执行过程:SQL Server把将要做什么写入log 文件(On Disk)->执行操作 -> 将完成操作写入log
如果Server执行失败,那么待事务被提交并且写入log 后,ROLLBACK TRAN就会自动执行
这里有必要对Server 执行失败和语句执行失败做一个简单说明
事务的使用 - 一般情况下事务会被用在存储过程当中
注意:如果事务当中包含多个更新数据库的语句(一般情况下,都大于一个),那么在执行过程当中比较稳妥的开发,则应该在每一个队数据库的控制语句后添加@@ERROR变量值的判断语句,有问题则返回对应的数值(对于跟踪错误信息很有帮助),并且回滚。
CREATE PROC sptest
AS
BEGIN TRAN
INSERT dbo.tbTest
VALUES (4,'ccc', 'haha', 222)
IF @@ERROR <>0
BEGIN
ROLLBACK TRAN
RETURN 1
END
UPDATE dbo.tbTest
SET Name = 'gghh'
WHERE ID = 4
IF @@ERROR <>0
BEGIN
ROLLBACK TRAN
RETURN 11
END
COMMIT TRAN
注意:COMMIT TRANSACTION & ROLLBACK TRANSACTION必须有与其对应的BEGIN TRANSACTION 才能正常被执行。 如:BEGIN TRAN .... ROLLBACK TRAN