回忆是一座桥
却是通往寂寞的牢

SQL语法 - 变量的使用

变量是一个强大的工具,它允许我们存储临时数据,这些数据可以在查询过程中被引用或修改。正确使用变量不仅可以提高查询的灵活性和效率,还可以使我们的SQL代码更加清晰和易于维护。

在不同的数据库实现中,变量的语法与使用可能略有差异,下面给出MySQL与SQL Server的变量的语法对比。

MySQL

1、系统变量

  • 系统变量属于服务器层面,由系统定义,其中又分为全局变量与会话变量。会话变量仅在当前会话中可用,重新连接数据库会重置会话变量的值。全局变量在全局范围都可用,重新连接数据库并不会重置全局变量的值,但不可跨重启,即数据库服务重启会重置全局变量的值。
  • SHOW [GLOBAL|SESSION] VARIABLES; –查看所有全局变量或会话变量
  • SHOW [GLOBAL|SESSION] VARIABLES LIKE ‘…’; –可以使用LIKE进行模糊匹配查找
  • SELECT @@[GLOBAL|SESSION].系统变量名; –查看指定变量的值
  • SET @@[GLOBAL|SESSION].系统变量名 = 变量值; –给指定变量赋值
  • SET [GLOBAL|SESSION] 系统变量名 = 变量值; –给指定变量赋值

2、用户变量

  • 用户变量是用户根据需要自行定义的变量,用户变量不需要提前声明,在用的时候直接用“@变量名”使用就可以,其作用域为当前连接。用户变量无需对其进行声明或初始化,当直接使用未赋值或未声明的用户变量时,变量的值为NULL。注意:两个@符是系统变量,一个@符是用户自定义变量。
  • 用户变量在引用的时候直接用“@变量名“即可
  • SET @var_name1 := expr1 [, @var_name2 := expr2]… –在定义用户变量的同时赋值
  • SET @var_name1 = expr1 [, @var_name2 = expr2]… –使用SET命令赋值时,:=与=的效果一致
  • SELECT @var_name1 := expr1 [, @var_name2 := expr2]… –在SELECT语句中赋值时必须使用:=
  • SELECT expr1,expr2… INTO @var_name1,@var_name2… FROM TableName
  • 使用SELECT INTO方式给变量赋值时,表达式必须为标量值,即查询结果只能为单行,并且不会输出变量赋值后的值,与SET的行为一致,即仅赋值。
  • 使用SELECT := 方式给变量赋值时,每一行都会执行一次赋值,故最终变量的结果为最后一行的值,但会输出变量每次赋值时的值列表,即赋值后查询。

3、局部变量

  • 局部变量是根据需要在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程或函数内的局部变量和输入参数,局部变量的作用范围是声明它的那个BEGIN…END块内。
  • 局部变量在定义与使用时均不需要加@前缀
  • 局部变量的声明:DECLARE 变量名 数据类型 [DEFAULT …] –没有指定默认值时,默认为NULL
  • 局部变量的赋值:可通过SET或SELECT INTO方式进行赋值,不支持SELECT var_name := expr方式

SQL Server

1、全局变量

  • 全局变量又称系统变量,是sql server 系统内部使用的变量,其作用范围并不局限于某一程序,而是任何程序均可随时调用。常用于存储一些sql server的配置设置值和效能统计数据。用户可在程序中用全局变量来测试系统的设定值或T-SQL命令执行后的状态值。引用全局变量时,全局变量名必须以‘@@’开头。不能定义与全局变量同名的局部变量。一般只查看系统变量的值,以此来获取相关信息。

2、局部变量

  • 局部变量的定义与使用必须带有@前缀,作用范围仅为程序内部。
  • 局部变量必须先声明后使用,没有进行赋值时,默认为NULL。
  • 局部变量的声明:declare @变量名1 数据类型1 [, @变量名2 数据类型2]…
  • set @局部变量=变量值|表达式 –局部变量的赋值,不支持:=运算符,只能用=
  • select @局部变量=变量值|表达式 –局部变量的赋值,不支持SELECT 值 into @变量 的方式
  • print @局部变量 或 select @局部变量 –局部变量的输出与查看
  • 使用SELECT = 方式给变量赋值时,每一行都会执行一次赋值,故最终变量的结果为最后一行的值,但不会输出变量每次赋值时的值列表,即仅赋值,与SET的行为一致。注意与MySQL的区分。
未经允许不得转载:夕枫 » SQL语法 - 变量的使用
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论