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

  • 相关阅读:
    一个简单的knockout.js 和easyui的绑定
    knockoutjs + easyui.treegrid 可编辑的自定义绑定插件
    Knockout自定义绑定my97datepicker
    去除小数后多余的0
    Windows Azure Web Site (15) 取消Azure Web Site默认的IIS ARR
    Azure ARM (1) UI初探
    Azure Redis Cache (3) 创建和使用P级别的Redis Cache
    Windows Azure HandBook (7) 基于Azure Web App的企业官网改造
    Windows Azure Storage (23) 计算Azure VHD实际使用容量
    Windows Azure Virtual Network (11) 创建VNet-to-VNet的连接
  • 原文地址:https://www.cnblogs.com/end/p/1999646.html
Copyright © 2011-2022 走看看