理解sql事故处理 1 在sql事务处理期间,由语句所完成的工作,在永久写入数据库之前都可以取消(使用rollback语句)。飞飞.Asp技术乐园commit告诉dbms使数据库的变化成为永久的。 下面就来理解一下事务处理过程 如:begin transaction 语句1 语句2 语句3 语句4 在应用程序正常结束之前,4条修改语句并未提交,即未成为永久的,由此,异常结束将使得dbms取消由应用程序体中的所有4条sql语句所做的修改。 如果想让前两条修改后永久保存到数据库中,而不管后两条是否成***。飞飞Asp技术乐园可以执行如下事务。 如: begin transaction 语句1 语句2 commit transaction begin transaction 语句3 语句4 2 在交互式会话期间,dbms默认为自动提交模式,这就意味着dbms自动地提交(使之成为永久的)每一条成***执行的sql语句的操作。因而,如果执行以下语句 delete from employees 将不能使用 rollback transaction 使删除的数据在恢复。 如何禁用自动提交模式呢?MS_SQL SERVER允许通过执行以下语句禁用自动提交模式 begin transaction 3 对带用大量语句时,可以使用存储点的方法,允许应用程序取消所做工作并恢复到事务处理中的特定点,由此,应用程序可对存储点使用rollback语句,重新做出事务处理中的部份语句所做的工作,而不必从头开始 如:begin transaction
create table trans_table (row_number smallint,descrp varchar(35)) insert into trans_table values(1,'insert 1') insert into trans_table values(2,'insert 2') --存储点save1 save transaction save1 delete from trans_table where row_number = 2 insert into trans_table values(3,'insert 3') insert into trans_table values(4,'insert 4') --存储点save2 save transaction save2 delete from trans_table where row_number = 1 delete from trans_table where row_number = 3 rollback transaction save2 update trans_table set descrp = 'row 1 after 2' delete trans_table where row_number = 4 commit transaction
在执行上面语句后 执行 select * from trans_table
的结果如下:
row_number descrp 1 'row 1 after 2' 3 'row 1 after 2'
|