(超实用、简单明了)Mysql变量定义与赋值

最近在使用存储过程定时创建分区的时候,运行时经常报错,原因都是因为变量的定义或者赋值问题导致的,在此记录一下MySQL的变量定义及赋值,方便自己和大家查阅,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

另外,这是一个系列文章,最终我们将实用MySQL定时器和存储过程,实现定时自动创建分区功能,这是在此之前需要掌握的知识点,感兴趣的敬请关注。

目录

局部变量

声明变量

变量赋值

用户变量

变量赋值

系统变量

查看变量

修改变量


局部变量

通常用在存储过程或函数中,定义在 begin and之间。

声明变量

DECLARE var_name[,...] type [DEFAULT value]
  • DECLARE:声明变量的关键字。

  • var_name:变量的名称,可同时定义多个。

  • type:变量数据类型。

  • DEFAULT value:为变量定义默认值,默认值为NULL。

示例:

定义一个变量 a ,数据类型为 int ,默认值为 0:

declare a int default value 0;

变量赋值

方式一使用 set 关键字赋值。

SET var_name = expr[,var_name = expr]...
  • set:变量赋值关键字。

  • var_name: 变量的名称;

  • expr: 赋值表达式。

注意:一个 SET 语句可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。

示例:

将变量 a 赋值为10:

set a=10;

方式二使用 SELECT ... INTO 赋值。

SELECT col_name [...] INTO var_name[,...]
FROM table_name WEHRE condition
  • col_name: 查询的字段名称。

  • var_name: 变量的名称。

  • table_name: 参数指表的名称。

  • condition: 指查询条件。

注意:将查询结果赋值给变量时,该查询语句的返回结果只能是单行。

示例:

从 t_user 表中查询id为2的记录,将该记录的 user_name 赋值给变量 uname:

select user_name into uname from t_user where id = 2;

用户变量

详情见官网 User-Defined Variables

用户变量无需声明,直接赋值即可。用户变量名不区分大小写。名称的最大长度为64个字符。

变量赋值

方式一使用 SET 赋值。

可以使用形如 set @变量名=变量值 或者 set@变量名:=变量值 的方式赋值。

SET @var_name = expr [, @var_name = expr] ...
或
SET @var_name := expr [, @var_name := expr] ...

示例:

SET @a=1,@b=2;
SELECT @a,@b;

查询结果如下:

 方式二使用 SELECT 赋值。

select @变量名:=变量值
select @变量名:=字段名 from table where ... limit 1;

示例:

SELECT @a:=1,@b:=2 AS b;
SELECT @a,@b;

示例:

现有表 t_user :

SELECT @a:=user_name FROM t_user WHERE id =1;

查询结果如下:

 再看如下语句:

SELECT @a:=user_name FROM t_user WHERE age =18;

 查询结果如下:

注意: 通过查询表给变量赋值时,需保证查询结果只有一条记录,如上这种查询除了三条,最好在查询后进行 limit 操作。

更多示例:

SET @t1=1, @t2=2, @t3:=4;
SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;

SET @a=1;
SET @a = @a + 1;
SELECT @a;

 

SET @a=1;
SELECT @a, @a:=@a+1

系统变量

像我们使用MySQL定时器一样,首先我们使用 SHOW VARIABLES LIKE '%event_sche%'; 查看是否开启了定时器支持,这里我们查的就是 系统变量,准确来说是系统变量中的 全局变量(GLOBAL)。

GLOBAL全局变量在MySQL启动时由服务器自动初始化默认值,这些默认值可通过MySQL的配置文件my.cnf进行更改。临时性修改可以直接使用 set 进行设置,但是重启服务后会设置失效。

SESSION类型会话变量在每一次建立新链接是初始化,作用域与用户变量一样,仅限于当前连接。

查看变量

方式一:使用 SHOW VARIABLES 语句或变量名。

以查看是否自动提交为例:

SHOW VARIABLES LIKE '%autocommit';

 显示所有会话变量:

show [session] variables;

其实session不管带不带,默认查询的都是会话变量。

显示所有全局变量:

show global variables;

方式二:使用 SELECT @@

以查看是否自动提交为例:

SELECT @@autocommit;

修改变量

修改全局变量:

以修改是否自动提交为例:

SET GLOBAL autocommit=1;
SET @@global.autocommit=1;

修改会话变量:

SET autocommit=1;
SET SESSION autocommit=1;
SET @@global.autocommit=1;

你可能感兴趣的:(mysql,mysql)