sql server和mysql变量赋值的区别 以及 MySql Declare

sql server和mysql都是我们经常用到的数据库系统,下面就为您介绍sql server和mysql变量赋值的区别,希望对您能有所启迪。

sql server中变量要先申明后赋值:

局部变量用一个@标识,全局变量用两个@(常用的全局变量一般都是已经定义好的);

申明局部变量语法:declare @变量名 数据类型;例如:declare @num int;

赋值:有两种方法式(@num为变量名,value为值)

set @num=value;   或   select @num=value;

如果想获取查询语句中的一个字段值可以用select给变量赋值,如下:

select @num=字段名 from 表名 where ……

mysql变量赋值不用事前申明,在用的时候直接用“@变量名”使用就可以了。

第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量

第二种用法:select @num:=1; 或 select @num:=字段名 from 表名 where …… 

注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是

select时,使用  “@var”这样的变量时  用“:=赋值”,“=”赋值,可多列赋值
             使用declare 的变量时可以使用  into赋值   , 最好使用:“:=”

多列赋值时需要使用以下方式:

  select @a:=aaa,@b:=bbb from x1 where aaa='eee';  

DECLARE ab varchar(10);
   DECLARE  bb varchar(10);   
 
  select @a:=aaa,@b:=bbb from x1 where aaa='eee';

例如: 

select @a:=aaa,@b:=bbb from x1  where ttt='39';

--  select @a,@b;

set @c=@b;
   if(@c='bbb39') THEN
     select @a;
    end if;


mysql可以在SP中声明不带@的局部变量,具体见declare。 

 

Declare 

 

20.2.8. DECLARE语句

DECLARE语句被用来把不同项目局域到一个 子程序:局部变量(请参阅20.2.9节,“存储程序中的变量”),条件和 处理程序(请参阅20.2.10节,“条件和处理程序”) 及光标(请参阅20.2.11节,“光标”)。SIGNAL和RESIGNAL语句当前还不被支持。

DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。

光标必须在声明处理程序之前被声明,并且变量和条件必须在声明光标或处理程序之前被声明。

20.2.9. 存储程序中的变量

你可以在子程序中声明并使用变量。

20.2.9.1. DECLARE局部变量
DECLARE var_name[,...] type [DEFAULT value]

这个语句被用来声明局部变量。要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。

局部变量的作用范围在它被声明的BEGIN ... END块内。它可以被用在嵌套的块中,除了那些用相同名字 声明变量的块。

20.2.9.2. 变量SET语句
SET var_name = expr [, var_name = expr] ...

在存储程序中的SET语句是一般SET语句的扩展版本。被参考变量可能是子程序内声明的变量,或者是全局服务器变量。

在存储程序中的SET语句作为预先存在的SET语法的一部分来实现。这允许SET a=x, b=y, ...这样的扩展语法。其中不同的变量类型(局域 声明变量及全局和集体变量)可以被混合起来。这也允许把局部变量和一些只对系统变量有意义的选项合并起来。在那种情况下,此选项被识别,但是被忽略了。

20.2.9.3. SELECT ... INTO语句
SELECT col_name[,...] INTO var_name[,...] table_expr

这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。

SELECT id,data INTO x,y FROM test.t1 LIMIT 1;

注意,用户变量名在MySQL 5.1中是对大小写不敏感的。请参阅9.3节,“用户变量”

重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的 局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column的:

CREATE PROCEDURE sp1 (x VARCHAR(5))
 BEGIN
    DECLARE xname VARCHAR(5) DEFAULT 'bob';
    DECLARE newname VARCHAR(5);
    DECLARE xid INT;
    
    SELECT xname,id INTO newname,xid 
      FROM table1 WHERE xname = xname;
    SELECT newname;
 END;

当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值