begin
select @n =COUNT(*) from tests where score<200
if(@n>0)
update tests set score=score+10 where score<100
else
break
end
select * from tests
这句话本身没有什么问题,可实际情况容易造成死循环,比如有一条数据的score=99,循环执行一次后,此条记录的score=109,这条永远都会满足select @n =COUNT(*) from tests where score<200 使@n>0,但又满足不了update tests set score=score+10 where score<100
这句话中的条件,所以此条记录永远都会被执行if @n>0 这个语句块,不会执行else中的部分,由此造成死循环
肯定是不一样的 首先while是循环 if是判断while就是只要当rs里还有下一条记录 就会继续执行{}里的东西
if只是判断当前rs指向的这条记录还有没有下一条 有就执行{}里的东西
比如你是要遍历整个rs 就用while 如果只是要对当前记录的下一条做判断处理 就用if;
大概就这样了 还有不懂的可以追问
for是查询所有符合条件的记录。while是从当前记录开始向下查找符合条件的记录,当遇到不符合条件的记录时,则停止查找,如果当前记录就不符合条件,那么就直接停止查找,不管后面有没有符合条件的记录,都不会找到一条。如用while查询表中性别为“男”的记录,假定记录第1、2、4、5号为“男”,从第1条开始就会查找到第1和第2条记录,如果从第3条开始,就一条也不会找到。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)