重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。
创新互联公司是一家专业提供芦山企业网站建设,专注与网站设计、成都网站制作、HTML5建站、小程序制作等业务。10年已为芦山众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
简单举个例子就是你要同时修改数据库中两个不同表的时候,如果它们不是一个事务的话,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,就只有第二个表回到未修改之前的状态,而第一个表已经被修改完毕。
而当你把它们设定为一个事务的时候,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,第一个表和第二个表都要回到未修改的状态!这就是所谓的事务回滚。
首先性能肯定受影响,因为要反向回滚操作。
以sqlserver为例,如果是插入操作,回滚期间锁表,而且一般级别数据库消耗时间接近1:3。如果插入进行了1小时有可能要超过3小时多来完成回滚,此时不要强行关闭数据库或者杀死进程,也为无论如何为了保持acid特性也不会中止回滚只能等。
begin tran
。。。。。。
在存储过程后面加上:
if @@error0
rollback tran
else
commit tran
sqlserver 的编辑器一般都是默认自动提交,也就是说你删除后,就自动提交了;不能回滚。
当然如果你设置成不是默认提交的话,那么你在提交之前可以回滚。
而如果是程序代码中删除的话,看你有没有启用事务,如果没有启用事务,那么一般也是默认提交的,如果启用事务,那么再提交前可以回滚,如果已经提交了,那么就回滚不了了。
放在事务里面就可以回滚哦!
sqlserver_update_事务回滚
begin tran
update
if @@rowCount !=约定数
goto err
commit tran
return;
err:
rollback tran
return;
请参阅!
如何启动Transaction; 共有三种方式
1.自动transaction
每句statement都是一个transaction.例一个update指令更新多笔纪录, 要就全部成功, 只要失败,全部会回复原值.
2.ExplicitTransaction
以Begin Transaction开始(开启)
3.ImplicitTransaction (建议不要用)
以Set Implicit_Transaction ON
如何结束Transaction; 共有三种方式
1. COMMIT Transaction(提交)
Transaction期间的任何修改,都会保证到数据库中
2. ROLLBACK Transaction(回滚)
数据会回复Transaction前状态
3. KILL SPID 强迫停止, 会rollback