首页 > 数据库 >mysql 变量声明及赋值的三种方式

mysql 变量声明及赋值的三种方式

时间:2023-02-14 11:02:33浏览次数:52  
标签:size 变量 mysql 三种 使用 MySQL 变量名 赋值


情景展示

  在mysql中,如何申明一个变量并进行使用?

  MySQL中主要有三种类型的变量:局部变量、系统变量及用户自定义变量。

1.局部变量(无前缀)

  1.1 声明变量

  作用域:BEGIN,END之间才能访问得到;

  适用范围:可以用在存储过程或函数中;

  使用前提:必须使用关键词DECLARE或者作为存储过程的输入或输出参数使用。

  说       明:

  多个变量的声明必须使用多个declare一一对应,否则会报错;

  定义变量的数据类型时,必须指定允许接收的最大字节数,否则会报错。

mysql 变量声明及赋值的三种方式_赋值

2022年2月13日19:17:06

如何一次声明多个变量?可以这样搞:

mysql 变量声明及赋值的三种方式_变量名_02

  以上两种变量的定义方式,在BEGIN,END之间进行赋值之后,就能直接使用啦。

  1.2 变量赋值

方式一:在定义变量的时候设置默认值;

  比如:

DECLARE
V_END_NUMBER VARCHAR ( 50 ) DEFAULT '12345';

  需要提醒的一点是:在使用declare定义变量的时候,如果不设置默认值的话,它的初始化值=NULL。

方式二:select cloumn1, cloumn2, ... into v_name1, v_name2, ... from table;

mysql 变量声明及赋值的三种方式_变量名_03

  这里还涉及两种情况:

  当将查询结果塞给两个及以上变量时,INTO左边的字段和INTO右边的变量数量必须一一对应上才行,并且只能使用一个INTO;

  当将查询结果塞给一个变量时,可以将这个作为最后一个查询字段,并且可以使用INTO赋值,后面不能再跟其他字段。

2022年2月19日18:39:49

方式三:set + var_name1 = value1, var_name2 = value2,...。

2.用户变量(以@为前缀)

  您可以访问任何用户定义的变量,而不声明它或初始化它;

  如果引用尚未初始化的变量,则它的值为NULL,并且类型为字符串;

mysql 变量声明及赋值的三种方式_赋值_04

  变量类型:整数,小数,浮点数,二进制或非二进制字符串或NULL;

  用户定义的变量是会话特定的。 也就是说,由一个客户端定义的用户变量不能被其他客户端看到或使用。

  使用用户变量(自定义变量),无需声明直接赋值就可以啦。

说明:MySQL里面的变量是不严格限制数据类型的,它的数据类型根据你赋给它的值而随时变化;

所以,用户变量不需要指定数据类型。

用户变量可以作用于当前整个连接,但当当前连接断开后,其所定义的用户变量都会消失。

  2.1 变量赋值

方式一:使用set

  变形一:set @变量名=变量值

mysql 变量声明及赋值的三种方式_赋值_05

  变形二:set @变量名:=变量值

mysql 变量声明及赋值的三种方式_后台开发工具_06

  

方式二:使用select

  注意:使用select赋值,必须使用“:=”,不能使用“=”,因为等于号在这里代表的含义是:比较;

  变形一:select @变量名:=变量值

mysql 变量声明及赋值的三种方式_赋值_07

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

mysql 变量声明及赋值的三种方式_赋值_08

  说明:通过查表给变量赋值的方式,前提条件是查询结果只有一条记录;

  为什么要限定一条记录,因为变量只有一个值!下面我们可以进行一下测试:

mysql 变量声明及赋值的三种方式_变量名_09

  看似变量userKey2有多个变量值,事实果真如此吗?

mysql 变量声明及赋值的三种方式_后台开发工具_10

  其实际结果只有一项,就是上面多条记录最末行的值。

  2.2 变量使用

  用法:@变量名

mysql 变量声明及赋值的三种方式_变量名_11

  这样一来,就可以看出:使用局部变量最终是要服务于于SQL的,不然变量的定义没有任何意义。

  我们可以得出这样的结论:局部变量适用于SQL执行。

3.系统变量(以@@为前缀)

  MySQL服务器维护许多系统变量配置为默认值。系统变量可以分为:

  GLOBAL类型:全局变量(影响服务器的整体操作);

全局变量在MySQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改。

  SESSION类型:会话变量(影响其对各个客户端连接的操作,也就是:当前的数据库连接);

会话变量在每次建立一个新的连接的时候,由MySQL来初始化。MySQL会将当前所有全局变量的值复制一份,来做为会话变量。

会话变量的作用域与用户变量一样,仅限于当前连接。当当前连接断开后,其设置的所有会话变量均失效。

  3.1 查询变量

  要查看正在运行的服务器使用的当前值,有两种方式:

方式一:SHOW VARIABLES 语句或变量名;

  以自动提交为例:

mysql 变量声明及赋值的三种方式_MySQL_12

显示所有的会话变量 

show [session] variables;

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

显示所有的全局变量

show global variables

方式二:SELECT @@变量名。

  以自动提交为例:

mysql 变量声明及赋值的三种方式_后台开发工具_13

  3.2 修改变量

说明:有些系统变量的值是可以利用语句来动态进行更改的,但是有些系统变量的值却是只读的。

  修改全局变量有2种方式:

SET GLOBAL sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000;

说明:要想更改全局变量的值,需要拥有super权限 。

修改会话变量有4种方式:

SET sort_buffer_size=1000000;
SET SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@local.sort_buffer_size=10000;

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

作者:​​Marydon



标签:size,变量,mysql,三种,使用,MySQL,变量名,赋值
From: https://blog.51cto.com/u_15964717/6056169

相关文章

  • MySQL 替换和截取指定位置字符串
    1.情景展示返回服务器的身份证号需要进行加密:只保留前4位和后3位,中间使用*代替,如何实现? 2.场景分析需要用到的函数有:IFNULL(),IF(),LENGTH(),REPLACE(),SUBSTR()......
  • Android Fragment的三种应用方式
    应用方式一:动态的使用Fragment首先是,MainActivity的布局文件activity_main.xml,该文件布局文件上面的顶部是一个TitleFragment,是一个静态声明的Fragment。中间也是一个Fr......
  • Mysql的日志系统
    MySQL整体来看,其实就有两块:一块是Server层,它主要做的是MySQL功能层面的事情;还有一块是引擎层,负责存储相关的具体事宜。如图:本次知识总结:最开始MySQL里并没有InnoDB引擎......
  • mysql 如何修改主键起始值?
    1.情景展示在实际开发中,往往会存在这种需求:将A表当中的数据导入B表,后面继续使用B表。由上一篇,我们了解到:B表如果是通过createtablebasselect*froma的方式,将会导致的......
  • mysql 临时表
    1.情景展示在实际开发过程中,当现有手段无法满足我们想要的数据时,我们就可以通过创建临时表,保存一些临时数据的方式,来用作数据的过渡。2.具体分析临时表只在当前连接可见,当关......
  • mysql 日期类型计算
    1.情景展示在进行按日期统计数据的时候,我们经常需要对日期的开始时间和结束时间有要求;在mysql中,日期字段如何进行时间的计算呢?2.to_days()to_days(日期)函数:返回从0000年(公......
  • mysql 快速备份表数据
    1.情景展示在工作过程中,我们往往会有对表数据进行备份的需求,比如说:对表数据进行大量操作时,为了以防万一,最好是将数据进行备份,以免操作不当,导致无法恢复原有的数据。2.解决方......
  • mysql 报错:Every derived table must have its own alias
    1.情景展示使用mysql对派生表查询数据的时候,报错信息如下:Everyderivedtablemusthaveitsownalias使用谷歌翻译成中文:每个派生表都必须有自己的别名。2.具体分析因为习......
  • mysql 获取系统当前时间的3种方式
    1.获取系统当前日期+时间方式一:now()方式二:sysdate()以上两种方式,对应日期类型:datetime。方式三:CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP对应日期类型:timestamp。方式四:to_da......
  • mysql、oracle like查询不走索引的解决方案
    1.情景展示我们知道:无论是mysql还是oracle,只要使用like查询,就可能会面临索引失效(不走索引)的问题;下面,我们将一起来看看什么情况下,索引会失效,以及如何解决不走索引的问题。已......