zoukankan      html  css  js  c++  java
  • 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 …… (张英:似乎mysql中不能使用 select @p1 := c1, @p2:=c2 from tb 方式赋值)

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

    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’。

  • 相关阅读:
    自学Java0711
    自学Java0710
    自学Java0709
    自学Java0708
    Leetcode刷题集
    网站收集
    674. 最长连续递增序列『简单』
    680. 验证回文字符串 Ⅱ『简单』
    686. 重复叠加字符串匹配『简单』
    693. 交替位二进制数『简单』
  • 原文地址:https://www.cnblogs.com/zhwl/p/2670503.html
Copyright © 2011-2022 走看看