mysql变量定义(declare,set,@)使用实例讲解

本文深入解析MySQL中的各种变量类型,包括用户变量、全局变量、会话变量及局部变量。阐述了每种变量的特点、作用范围及定义方式,如使用declare和set语句的不同,并通过实例演示了变量的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql变量的种类

  1. 用户变量:以”@”开始,形式为”@变量名”。用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
  2. 全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名  或者  set @@global.变量名,对所有客户端生效。只有具有super权限才可以设置全局变量
  3. 会话变量:只对连接的客户端有效。
  4. 局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量。declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量

通俗理解术语之间的区别:

用户定义的变量就叫用户变量。这样理解的话,会话变量和全局变量都可以是用户定义的变量。只是他们是对当前客户端生效还是对所有客户端生效的区别了。所以,用户变量包括了会话变量和全局变量

局部变量与用户变量的区分在于两点:1.用户变量是以”@”开头的。局部变量没有这个符号。2.定义变量不同。用户变量使用set语句,局部变量使用declare语句定义 3.作用范围。局部变量只在begin-end语句块之间有效。在begin-end语句块运行完之后,局部变量就消失了。

所以,最后它们之间的层次关系是:变量包括局部变量和用户变量。用户变量包括会话变量和全局变量。

 

mysql declare定义变量

mysql declare用于定义变量,在存储过程和函数中通过declare定义变量在BEGIN…END中,且在语句之前。并且可以通过重复定义多个变量

declare变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了,不能使用了。这个同编程一样。

注意:declare定义的变量名不能带‘@’符号,mysql在这点做的确实不够直观,往往变量名会被错成参数或者字段名。

mysql存储过程中使用declare定义变量,实例如下:

DROP PROCEDURE IF EXISTS insert_ten_rows $$

CREATE PROCEDURE insert_ten_rows () 
    BEGIN
        DECLARE crs INT DEFAULT 0;

        WHILE crs < 10 DO
            INSERT INTO `continent`(`name`) VALUES ('cont'+crs);
            SET crs = crs + 1;
        END WHILE;
    END $$

DELIMITER ;

mysql SET定义变量

mysql set也可以用来定于变量,定义变量的形式是以”@”开始,如:”@变量名”。

mysql SET定义变量实例:

mysql> SET @t1=0, @t2=1, @t3=2;

mysql> select @t1;
+------+
| @t1  |
+------+
| 0    |
+------+

mysql> select @t2;
+------+
| @t2  |
+------+
| 1    |
+------+
/*  http://www.manongjc.com/article/1442.html */
mysql> select @t3;
+------+
| @t3  |
+------+
| 2    |
+------+

mysql>

复杂一点的实例:

mysql> SET @t1=0, @t2=1, @t3=2;

mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2  | @t3  |
+----------------------+------+------+------+
|                    5 | 5    | 1    | 4    |
+----------------------+------+------+------+

 

mysql declare和set定义变量的区别

mysql declare和set定义变量,除了一个不加@和一个加@这个区别之外,还有以下区别:

declare用来定义局部变量

@用来定义会话变量

declare变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了,不能使用了。这个同编程一样。

另外有种变量叫做会话变量(session variable),也叫做用户定义的变量(user defined variable)。这种变量要在变量名称前面加上“@”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。这种变量用途比较广,因为只要在一个会话内(就是某个应用的一个连接过程中),这个变量可以在被调用的存储过程或者代码之间共享数据。

 

<think>嗯,用户想知道如何在MySQL定义函数中定义count变量并与传入参数比较。首先,我需要回忆一下MySQL定义函数的基本结构。根据引用[3],函数体必须有return语句,而且每个SQL语句后面要用分号结尾,所以可能需要用delimiter来改变结束符。 然后是变量定义MySQL中在函数里定义变量应该使用DECLARE关键字,对吧?比如DECLARE count INT DEFAULT 0;这样就能声明一个整型变量count,初始值为0。接下来,用户可能需要给这个变量赋值,可以用SET语句,或者通过SELECT...INTO的方式。比如SET count = 10;或者SELECT COUNT(*) INTO count FROM table;这样。 接下来是比较传入的参数。假设函数有一个输入参数param,那么比较的时候直接用IF语句,比如IF count > param THEN ... END IF;。不过需要注意变量的作用域和名称是否冲突,比如参数名和变量名不能重复。 用户可能还需要一个示例,所以得构造一个简单的例子。比如函数接收一个参数min_count,然后计算某个表中的记录数,如果大于min_count就返回1,否则返回0。这样的话,函数的结构应该是先声明变量,查询赋值,然后比较,最后返回结果。 另外,根据引用[1],参数类型有IN、OUT、INOUT,但用户的问题里只提到了输入参数,所以函数应该用IN参数。同时,引用[4]提到自定义函数可以有多个参数,用逗号分隔,但这里用户只需要一个传入参数来比较。 还需要注意,函数必须用RETURN返回,而存储过程用OUT参数。所以这里肯定是用RETURN语句。另外,分隔符的问题,创建函数之前要用DELIMITER $$来改变结束符,避免分号冲突。 可能用户遇到的错误包括变量声明的位置不对,比如必须在函数体开始处声明变量,或者在后续逻辑中使用了未声明的变量。还有比较的时候语法错误,比如缺少THEN或者END IF。 最后,需要确保语法正确,比如变量名不要和列名冲突,使用正确的语句结构。检查示例中的每一步是否正确,特别是DECLARE的位置和IF的条件判断是否正确。</think>### 在 MySQL定义函数中定义变量并与参数比较的方法 #### 1. **定义变量的语法** 在 MySQL定义函数中,变量需通过 `DECLARE` 关键字声明,格式为: $$ DECLARE \变量名\ 数据类型 [DEFAULT 默认值]; $$ 例如,定义 `count` 变量并初始化为 0: ```sql DECLARE count INT DEFAULT 0; ``` #### 2. **变量赋值与参数比较** - **赋值方式**:使用 `SET` 或 `SELECT...INTO` ```sql SET count = 10; -- 直接赋值 SELECT COUNT(*) INTO count FROM 表名; -- 通过查询结果赋值 ``` - **与传入参数比较**:使用 `IF` 条件语句 ```sql IF count > 输入参数 THEN -- 执行逻辑 END IF; ``` #### 3. **完整示例** 以下示例函数接收参数 `min_count`,统计某表记录数并与参数比较: ```sql DELIMITER $$ CREATE FUNCTION check_count(min_count INT) RETURNS INT BEGIN DECLARE count INT DEFAULT 0; SELECT COUNT(*) INTO count FROM 表名; IF count > min_count THEN RETURN 1; ELSE RETURN 0; END IF; END$$ DELIMITER ; ``` **说明**: - 使用 `DELIMITER $$` 避免分号冲突[^3]; - 参数 `min_count` 为 `IN` 类型(默认类型)[^1]; - 变量作用域仅限于函数体内部。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值