Sql Server数据库中的事务处理:开始、撤销、提交

时间:2024-04-16 09:49:02

Sql server中的事务处理功能:为了保证数据库的完整性。

事务(transaction):是将多个修改语句组合在一起的方法,这个方法中的所有语句只有全部执行才能正确完成功能。即要么全部执行,要么全部不执行。
 
事务的acid特性:
原子性:事务处理语句是一个整体,不可分割。Atomicity--A
一致性:事务处理前后数据库前后状态要一致。Consistency--C
分割性:多个事务并发处理互不干扰。Isolation--I
持久性:事务处理完成后,数据库的变化将不会再改变。Durability--D
开始事务:begin tran[saction]
显式开始事务:begin tran[action] tranaction_name
隐式开始事务:在执行insert、update、delete任何一条语句时自动执行的事务。
开启隐式事务应先执行set inpliclt_transactions on语句
关闭隐式事务需执行set inpliclt_transactions off语句
 
撤销事务:rollback tran[saction]
撤销事务语句被执行后整个事务处理将会被终止,事务处理中的所有操作将被忽略。
 
提交事务:commit tran[saction]
事务被提交后,将会将修改后的数据更新到数据库中。
 
根据全局变量@@error判断结果执行rollback tran和commit tran:
在事务的处理过程中,根据条件判断的结果执行取消或者提交事务,保证数据的正确性和完整性。
@@error全局变量会记录语句执行过程中的最后一条错误信息,如果有错误,则变量值为1,否则为0。
Begin tran transaction_try
Declare @insert_tran,@update_tran
Insert…..
Select @insert_tran=@@error
 
Update……
Select @update_tran=@@error
 
If @insert_tran=0 and @update_tran=0
Begin
…rollback tran
End
 
设置和撤销事务的保存点:
事务处理过程中,不撤销所有的操作而设置合适的保存点,提交从begin tran到保存点之间的修改语句。
设置保存点:save tran savepoint_name
撤销保存点:rollback tran savepoint_name
举例实验一下:
1.先从student表中查询一下所有的记录
select * from student
查询结果截图:
Student表中的数据记录
Student表中的数据记录
 
2.事务中加入判断和设置断点
Begin tran tran_a
Insert into student values(\'5\',\'孙七\',\'男\',\'计算机\')
Begin
If @@error<>0
Rollback tran
end
Save tran save1
 
Insert into student values(\'1\',\'孙七\',\'男\',\'计算机\')
Begin
If @@error<>0
rollback tran save1
end
commit tran
效果截图:
使用@@error判断处理事务并设置事务保存点。
使用@@error判断处理事务并设置事务保存点。
 
3.再次查询student表记录
select * from student
查询结果截图:
数据表查询结果
数据表查询结果
结果说明:此事务中设置的保存点成功,第一条数据插入成功,执行了事务中的部分语句。
第二条数据插入是不合法的,但是返回到了保存点位置,并非完全不执行事务中的语句。