查看MySQL变量

类似于Oracle的参数文件,MySQL的选项文件(如my.cnf)用于配置MySQL服务器,但和Oracle叫法不一样,在MySQL里, 官方叫变量(Varialbes),但其实叫参数也是可以的,只要明白这俩是同一个东西就可以了。
MySQL的变量分为以下两种:
1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看
2)状态变量:监控MySQL服务器的运行状态,可以用show status查看
 
系统变量
系统变量按其作用域的不同可以分为以下两种:
1)分为全局(GLOBAL)级:对整个MySQL服务器有效
2)会话(SESSION或LOCAL)级:只影响当前会话
有些变量同时拥有以上两个级别,MySQL将在建立连接时用全局级变量初始化会话级变量,但一旦连接建立之后,全局级变量的改变不会影响到会话级变量。
查看系统变量的值
可以通过show vairables语句查看系统变量的值:
[sql] 
mysql> show variables like 'log%';  
mysql> show variables where Variable_name like 'log%' and value='ON';  
注意:show variables优先显示会话级变量的值,如果这个值不存在,则显示全局级变量的值,当然你也可以加上GLOBAL或SESSION关键字区别:
[sql] 
show global variables;  
show session/local variables;  
在写一些存储过程时,可能需要引用系统变量的值,可以使用如下方法:
[sql] 
@@GLOBAL.var_name  
@@SESSION.var_name 或  
@@LOCAL.var_name  
如果在变量名前没有级别限定符,将优先显示会话级的值。
最后一种查看变量值的方法是从INFORMATION_SCHEMA 数据库里的GLOBAL_VARIABLES和SESSION_VARIABLES表获得。
 
 

设置和修改系统变量的值

在MySQL服务器启动时,有以下两种方法设置系统变量的值:
1)命令行参数,如: mysqld --max_connections=200
2)选项文件(my.cnf)
在MySQL服务器启动后,如果需要修改 系统变量的值,可以通过SET语句:
[plain] 
SET GLOBAL var_name = value;  
SET @@GLOBAL.var_name = value;  
SET SESSION var_name = value;  
SET @@SESSION.var_name = value;  
如果在变量名前没有级别限定符,表示修改会话级变量。
注意:和启动时不一样的是,在运行时设置的变量不允许使用后缀字母'K'、‘M'等,但可以用表达式来达到相同的效果,如:
[sql] 
SET GLOBAL read_buffer_size = 2*1024*1024  
 
这里一个容易把人搞蒙的地方是如果查询时使用的是show variables的话,会发现设置好像并没有生效,这是因为单纯使用show variables的话就等同于使用的是show session variables,查询的是会话变量,只有使用show global variables,查询的才是全局变量。

网络上很多人都抱怨说他们set global之后使用show variables查询没有发现改变,原因就在于混淆了会话变量和全局变量,如果仅仅想修改会话变量的话,可以使用类似set wait_timeout=10;或者set session wait_timeout=10;这样的语法。
 
状态变量
状态变量可以使我们及时了解MySQL服务器的运行状况,可以使用show status语句查看。
状态变量和相同变量类似,也分为全局级和会话级,show status也支持like匹配查询,比较大的不同是状态变量只能由MySQL服务器本身设置和修改,对于用户来说是只读的,不可以通过SET语句设置和修改它们。

转载于:https://www.cnblogs.com/youngerger/p/8810185.html

<think> 首先,用户的问题是:“mysql怎么查看用户变量”,意思是“mysql怎么查看用户变量”。我需要用中文回答这个问题。 用户变量MySQL中是指使用@前缀声明的变量,例如@var。要查看这些变量MySQL没有直接的命令列出所有用户变量,但可以通过查询信息模式或使用SHOW命令间接查看。 回顾MySQL的知识: - 用户变量是以@开头的变量,如@my_var。 - 要查看特定变量,可以使用SELECT @var;。 - 但列出所有用户变量没有内置命令。可以用SHOW VARIABLES;列出系统变量,但用户变量不同。 - 一个常见的方法是查询performance_schema.user_variables_by_thread或information_schema.USER_VARIABLES,但标准MySQL中没有USER_VARIABLES表。在MySQL 8.0及以上,可能通过performance_schema.user_variables_by_thread来查看。 - 实际上,在MySQL中,用户变量是会话级别的,且没有全局列表。通常,只能通过知道变量名来SELECT它们。 标准方法: - 要查看一个特定的已知变量,使用SELECT @var_name;。 - 要列出所有当前会话的用户变量,没有直接命令。但可以尝试查询performance_schema.session_variables或类似的东西,但这不是标准。 - 在MySQL中,用户变量不是存储在系统表中;它们只在会话内存中。所以,唯一可靠的方式是知道变量名后查询。 一个可行的方式是:在MySQL 8.0及以上,performance_schema.session_status表或performance_schema.session_variables可能包含一些信息,但用户变量是单独的。 - 正确的方法是:performance_schema.user_variables_by_thread表包含用户定义的变量。所以,可以查询这个表。 查询示例: ```sql SELECT * FROM performance_schema.user_variables_by_thread; ``` 这将列出所有会话的用户变量,但需要performance_schema启用。 为了回答用户: - 解释基本方法:使用SELECT @变量名;查看特定变量。 - 提到如果使用MySQL 8.0及以上,且performance_schema启用,可以查询performance_schema.user_variables_by_thread来列出所有变量。 - 如果performance_schema没启用,可能需要手动记录变量名。 现在,回答问题后,必须输出“§§相关问题§§”,然后提出3-5个相关问题。 输出格式: 1. 回答问题(用中文)。 2. 在末尾输出一行:"§§相关问题§§" 3. 紧接着,列出3-5个相关问题,编号如1. ··· 2. ··· 等。 4. 禁止换行分散,意思是相关问题列表要连贯输出,不要有额外换行。 相关问题必须基于用户的问题和我的回答: - 用户问题是关于MySQL查看用户变量。 - 我的回答会涉及SELECT @var;和查询performance_schema.user_variables_by_thread。 - 相关问题可以围绕用户变量使用、设置、相关概念等。 可能的3-5个相关问题: 1. 如何设置MySQL用户变量? 2. 用户变量和作用域(会话级别)有什么特点? 3. 如何在存储过程中使用用户变量? 4. 性能模式(performance_schema)在MySQL中如何启用和配置? 5. 系统变量和用户变量有什么区别? 确保3-5个,编号1.开始。 完整结构: - 回答问题的内容。 - 代码块如果有相关代码。 - 然后一行"§§相关问题§§" - 然后1. ... 2. ... 3. ... 等。 在回答中,可能需要提供代码示例。 撰写回答: 1. 解释查看用户变量的方法。 2. 提供示例代码。 例如: 要查看MySQL中的用户变量,您可以使用SELECT语句查询特定的变量名。例如: ```sql SELECT @my_variable; ``` 这将返回变量@my_variable的值。 如果您想列出所有当前会话的用户变量,在MySQL 8.0及以上版本,并且performance_schema启用时,可以查询performance_schema.user_variables_by_thread表: ```sql SELECT * FROM performance_schema.user_variables_by_thread; ``` 否则,无法直接列出所有用户变量,因为它们在会话内存中存储。 最后,输出相关问题。 相关问题: 1. 如何在MySQL中设置用户变量? 2. 用户变量MySQL会话结束时会发生什么? 3. 为什么查询performance_schema.user_variables_by_thread需要权限? 4. 用户变量和局部变量在存储过程中有什么区别? 5. 如何检查performance_schema是否启用? 确保3-5个,我选4个或5个。 最终输出: - 回答内容。 - "§§相关问题§§" - 1. ... 2. ... 3. ... 4. ... </think> 在 MySQL 中,用户变量是以 `@` 前缀定义的变量(例如 `@my_var`),用于会话级别的临时存储。查看用户变量的方法如下: 1. **查看特定用户变量**: 使用 `SELECT` 语句直接查询已知变量名: ```sql SELECT @variable_name; ``` 例如,`SELECT @count;` 会返回变量 `@count` 的当前值。 2. **列出所有用户变量MySQL 8.0及以上)**: 如果启用了 `performance_schema`,可以查询 `performance_schema.user_variables_by_thread` 表: ```sql SELECT * FROM performance_schema.user_variables_by_thread WHERE VARIABLE_NAME IS NOT NULL; ``` 这会显示当前线程(会话)的所有用户变量名称和值。 **注意**: - 需确保 `performance_schema` 已启用(默认开启),否则需在配置文件中设置 `performance_schema=ON`。 - 在 MySQL 5.7 或更早版本中,无法直接列出所有用户变量,只能通过脚本或已知变量名查询。 3. **无法直接全局查看**: 用户变量是会话级别的,关闭会话后自动销毁。没有内置命令(如 `SHOW VARIABLES`)支持列出所有用户变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值