系统变量(System Variable),由 MySQL 系统定义和维护的变量。系统变量可能包含全局值(全局变量)和会话值(会话变量),全局变量在服务器启动时通过命令行参数或者选项文件进行设置,在服务关闭时销毁;当客户端连接到服务器时,MySQL 会将大部分的全局变量复制一份作为客户端的会话变量,会话变量在连接断开时销毁。
用户变量(User-Defined Variable),由用户自定义的变量,在连接会话期间有效,可以用于在不同 SQL 语句之间传递数据。
局部变量(Local Variable),在存储过程或者函数中定义的变量,通常用于存储中间结果。局部变量的作用域为存储过程/函数内或者某个语句块之内。
SHOW [GLOBAL | SESSION] VARIABLES
[LIKE 'pattern' | WHERE expr]
show variables;
Variable_name |Value |
----------------------------------------------|------------------------------|
activate_all_roles_on_login |OFF |
admin_address | |
admin_port |33062 |
admin_ssl_ca | |
admin_ssl_capath | |
admin_ssl_cert | |
admin_ssl_cipher | |
...
show global variables like 'version%';
Variable_name |Value |
-----------------------|----------------------------|
version |8.0.21 |
version_comment |MySQL Community Server - GPL|
version_compile_machine|x86_64 |
version_compile_os |Linux |
version_compile_zlib |1.2.11 |
select @@global.sql_mode;
select @@max_connections;
select @@session.sql_mode;
select @@local.sql_mode;
select @@sql_mode;
SET variable = expr [, variable = expr] ...
variable: {
user_var_name
| param_name
| local_var_name
| {GLOBAL | @@GLOBAL.} system_var_name
| {PERSIST | @@PERSIST.} system_var_name
| {PERSIST_ONLY | @@PERSIST_ONLY.} system_var_name
| [SESSION | @@SESSION. | @@] system_var_name
}
set global max_connections = 1000;
set @@global.max_connections = 1000;
set max_connections = 1000;
ERROR 1229 (HY000): Variable 'max_connections' is a GLOBAL variable and should be set with SET GLOBAL
set persist max_connections = 1000;
set @@persist.max_connections = 1000;
set persist_only max_connections = 1000;
set @@persist_only.max_connections = 1000;
reset persist if exists max_connections;
set session sql_mode = 'TRADITIONAL';
set local sql_mode = 'TRADITIONAL';
set @@session.sql_mode = 'TRADITIONAL';
set @@local.sql_mode = 'TRADITIONAL';
set @@sql_mode = 'TRADITIONAL';
set sql_mode = 'TRADITIONAL';
set @@session.max_join_size = default;
set @@session.max_join_size = @@global.max_join_size;
@id
@123
@.user_var
@$a_very_long_variable_name
@'my-var'
@"my-var"
@`my-var`
SET @var_name = expr [, @var_name = expr] ...
set @employee_count = (select count(*) from employee);
set @user_name = 'tony dong';
select @counter := 100;
select @user_name := 'tony dong';
select @emp_name := emp_name
from employee
order by emp_id;
select @emp_name;
@emp_name |
----------|
孙乾 |
set @emp_id = 1;
select @emp_id;
@emp_id|
-------|
1|
select emp_id, emp_name
from employee
where emp_id = @emp_id;
emp_id|emp_name |
------|---------|
1|刘备 |
set @limit_number = 5;
select *
from employee
limit @limit_number;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@limit_number' at line 3
set @x = 5, @x=@x+1;
select @x;
@x|
--|
0x|
-- 生成订单
insert into order(clo1, col2, ...) values ...;
-- 获取订单号
select @order_id:=last_insert_id();
-- 生成订单明细
insert into order_detail(order_id, col2, ...) values (@order_id, ...);
set @col = "emp_name";
select @col
from employee
limit 1;
@col |
--------|
emp_name|
select `@col`
from employee
limit 1;
ERROR 1054 (42S22): Unknown column '@col' in 'field list'
set @col = "emp_name";
set @sql = concat("select ", @col, " from employee limit 1");
prepare stmt from @sql;
execute stmt;
emp_name |
---------|
关兴 |
deallocate prepare stmt;
select @sql;
@sql |
-------------------------------------|
select emp_name from employee limit 1|
原文作者:SQL编程思想;如有侵权,请联系管理员删除。