在sql2000中,下面代码:
begin transaction
if exists(select title_id from titles where title_id='tc2')
begin
delete titles where title_id='tc2'
rollback transaction
print 'ok'
end
问:人工能找到title_id 为tc2的记录,程序结果是()
答案是:a.删除该记录,不打印任何信息
b.删除该记录,并且打印ok
c。不删除该记录,并且打印ok
正确答案好像是
c
我不知道已经是rollback了为什么还把ok打印出来呢?
谢谢各位能够解答!!!
begin transaction
if exists(select title_id from titles where title_id='tc2')
begin
delete titles where title_id='tc2'
rollback transaction
print 'ok'
end
问:人工能找到title_id 为tc2的记录,程序结果是()
答案是:a.删除该记录,不打印任何信息
b.删除该记录,并且打印ok
c。不删除该记录,并且打印ok
正确答案好像是
c
我不知道已经是rollback了为什么还把ok打印出来呢?
谢谢各位能够解答!!!
rollback只是事务回滚,不影响代码的流程。
rollback只是事务回滚,不影响代码的流程。
rollback只是事务回滚,不影响代码的流程。
if exists(select title_id from titles where title_id='tc2')
begin
delete titles where title_id='tc2'
print 'ok1'
rollback transaction
print 'ok2'
end结果是记录不删除,同时2条print语句都生效的
事务回滚:在对数据库有影响的sql语句发生后,数据库会记录发生的前像和后像,如果commit,则将后像记入事务日志,如果rollback,则前像记入事务日志。这里的对数据库有影响的sql语句,应该是对数据库进行操作的一些逻辑操作,所以print语句肯定会被执行而不被回滚
if exists(select title_id from titles where title_id='BU1032')
begin
delete titles where title_id='tc2'
print 'ok1'
rollback transaction
print 'ok2'
end-------------------
结果(所影响的行数为 0 行)ok1
ok2
答案是C。
rollback只是事务回滚,不影响代码的流程
rollback的功能只是将之前的一段记录抹去;不影像继续执行下面的代码
title_id varchar(10)
)insert titles
select 'tc1' union all
select 'tc2'
begin transaction
if exists(select title_id from titles where title_id='tc2')
begin
delete titles where title_id='tc2'
print 'ok1'
rollback transaction
print 'ok2'
end--result:(所影响的行数为 1 行)ok1
ok2--rollback transaction 只是回滚事务,并不是返回的意思,所以肯定要执行"print 'ok2'"
这个语句的。--加一个return:
begin transaction
if exists(select title_id from titles where title_id='tc2')
begin
delete titles where title_id='tc2'
print 'ok1'
rollback transaction
return
print 'ok2'
end--result:(所影响的行数为 1 行)ok1