当前位置:Gxlcms > 数据库问题 > Mysql 里面使用row_number() 的用法和注意

Mysql 里面使用row_number() 的用法和注意

时间:2021-07-01 10:21:17 帮助过:2人阅读

TABLE `test` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Col1` varchar(50) DEFAULT NULL, `Col2` varchar(50) DEFAULT NULL, `Col3` int(11) DEFAULT NULL, `Col4` float DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

然后插入测试数据,使用po主介绍的方法来测试

insert into test(Col1,Col2,Col3,Col4) values (1,2,3,4),(1,2,6,5),(1,2,7,8),(1,"激发",5,7);


delimiter //

select @row:=case when @row is null then 1 else @row+1 end as RNr,        
        ID,Col1,Col2,Col3,Col4 from test ;
//
delimiter ;

结果查询出结果是 

技术分享

 

查询出来的记过,Rnr为什么都是1 呢?因为对于本次查询来说,@row 这个变量的值,一直都是null ,所以根据case 的判别式来看的话,就只能是1 了。引起了这种现象。但是再执行,就正常的了,我们将同样的脚本

再执行一次,查出来应该就是2345了

 技术分享

测试验证确实如此,由此可见。变量在本次会话里面是一直存在的,并且每次会沿用,所以就出现前面的那种情况。

其实对应的解决方法也很简单,既然因为每个会话都会用同一个值,那么只需要在开始的时候赋初值就可以解决问题了,比如我们这个例子在开始的时候将 set @row = 0; 加上这句,那么每次执行,都会先赋初值,当然就可以得到一致的执行效果了。

 

这个测试告诉了我,在这个数据库里面,控制变量初始值hin重要。

 

Mysql 里面使用row_number() 的用法和注意

标签:

人气教程排行