在一个排行榜的sql中,看到了一个@i的东西。感觉看不懂的东西都是牛逼的东西。所以心里就想着自己要学会它。今天随便百度了一下,发现是个很简单的东西。其实它就是mysql中的变量。为查询结果添加序号的原理,就是生成一个变量,每行的结果加一。 看了一些其他的博客, 。 感觉这个哥们儿转的一篇文章写的还不错https://blog.csdn.net/qq_34531925/article/details/79483312 mysql文档 https://www.mysqlzh.com/doc/225/507.html 下面是自己的理解。如果不对望指正。谢谢。
要明白mysql序号,就要先知道mysql变量。变量分两种: 1系统变量;2用户变量;
局部变量mysql 文档给出的定义是: DECLARE var_name[,…] type [DEFAULT value] 这个语句被用来声明局部变量。要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。 局部变量的作用范围在它被声明的BEGIN … END块内。它可以被用在嵌套的块中,除了那些用相同名字 声明变量的块。 1:被声明的BEGIN … END块; 2:DECLARE定义局部变量
变量SET语句SET var_name = expr [, var_name = expr] … 在存储程序中的SET语句是一般SET语句的扩展版本。被参考变量可能是子程序内声明的变量,或者是全局服务器变量。 在存储程序中的SET语句作为预先存在的SET语法的一部分来实现。这允许SET a=x, b=y, …这样的扩展语法。其中不同的变量类型(局域 声明变量及全局和集体变量)可以被混合起来。这也允许把局部变量和一些只对系统变量有意义的选项合并起来。在那种情况下,此选项被识别,但是被忽略了。 mysql 文档中给出的解释的自己读的也不太明白。
另外还需要一个基础知识。mysql中的 := 和 = 符号的区别。推荐一篇文章 mysql :=和=的区别: https://blog.csdn.net/qq_37155959/article/details/81005287
理解了变量, 和 “:=” , "= " 操作符,现在将两者联系起来。这篇文章将两者之间的联系讲解的比较明白。 MYSQL的用户变量(@)和系统变量(@@): https://blog.csdn.net/welkin8888/article/details/3505533
理解了变量和操作符号了, 估计到现在,自然而然的就懂了实现mysql的排序了再推荐一篇文章,这篇文章,很简单。但是一看,就基本上看完了,mysql的排序。 MySQL的(@i:=@i+1)用处及用法: https://www.wandouip.com/t5i407285/