DELIMITER //
CREATE PROCEDURE sp_test(var1 INT)
BEGIN
DECLARE start INT unsigned DEFAULT 1;
DECLARE finish INT unsigned DEFAULT 10;
SELECT var1, start, finish;
SELECT * FROM places WHERE place BETWEEN start AND finish;
END; //
DELIMITER ;
CALL sp_test(5);
如果缺少 DEFAULT 子句,则初始值为 NULL .
局部变量的范围是声明它的 BEGIN ... END 块 .
Server System Variables (prefixed with @@):
MySQL服务器将许多system variables配置为默认值 . 它们的类型可以是 GLOBAL , SESSION 或 BOTH .
全局变量会影响服务器的整体操作,而会话变量会影响其对各个客户端连接的操作 .
要查看正在运行的服务器使用的当前值,请使用 SHOW VARIABLES 语句或 SELECT @@var_name .
SHOW VARIABLES LIKE '%wait_timeout%';
SELECT @@sort_buffer_size;
可以使用命令行或选项文件中的选项在服务器启动时设置它们 . 当服务器使用 SET GLOBAL 或 SET SESSION 运行时,大多数都可以动态更改:
-- Syntax to Set value to a Global variable:
SET GLOBAL sort_buffer_size=1000000;
SET @@global.sort_buffer_size=1000000;
-- Syntax to Set value to a Session variable:
SET sort_buffer_size=1000000;
SET SESSION sort_buffer_size=1000000;
SET @@sort_buffer_size=1000000;
SET @@local.sort_buffer_size=10000;
8
SET
SET @var_name = value
要么
SET @var := value
接受运算符 = 和 :=
选择
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
如果找到多个记录集只有col2中的最后一个值是keep(override);
SELECT col1, col2 INTO @var_name, col3 FROM .....
在这种情况下,select的结果不包含col2值
0
使用 set 或 select
SET @counter := 100;
SELECT @variable_name := value;
例如:
SELECT @price := MAX(product.price)
FROM product
2
DECLARE var_name [,var_name] ... type [DEFAULT value]此语句声明存储程序中的局部变量 .
5 回答
MySQL中主要有三种变量:
您可以访问任何用户定义的变量,而无需声明或初始化它 . 如果引用尚未初始化的变量,则其值为
NULL
且为字符串类型 .您可以使用
SET
或SELECT
语句初始化变量:要么
可以从一组有限的数据类型为用户变量分配值:整数,十进制,浮点,二进制或非二进制字符串或NULL值 .
用户定义的变量是特定于会话的 . 也就是说,其他客户端无法看到或使用由一个客户端定义的用户变量 .
它们可以在使用Advanced MySQL user variable techniques的
SELECT
查询中使用 .在访问局部变量之前,需要使用
DECLARE
声明局部变量 .它们可以用作局部变量和存储过程中的输入参数:
如果缺少
DEFAULT
子句,则初始值为NULL
.局部变量的范围是声明它的
BEGIN ... END
块 .MySQL服务器将许多system variables配置为默认值 . 它们的类型可以是
GLOBAL
,SESSION
或BOTH
.全局变量会影响服务器的整体操作,而会话变量会影响其对各个客户端连接的操作 .
要查看正在运行的服务器使用的当前值,请使用
SHOW VARIABLES
语句或SELECT @@var_name
.可以使用命令行或选项文件中的选项在服务器启动时设置它们 . 当服务器使用
SET GLOBAL
或SET SESSION
运行时,大多数都可以动态更改:要么
接受运算符 = 和 :=
如果找到多个记录集只有col2中的最后一个值是keep(override);
在这种情况下,select的结果不包含col2值
使用 set 或 select
例如:
DECLARE var_name [,var_name] ... type [DEFAULT value]此语句声明存储程序中的局部变量 .
防爆 . DECLARE id INT unsigned DEFAULT 1;
要为变量提供默认值,请包含DEFAULT子句 . 该值可以指定为表达式;它不一定是常数 . 如果缺少DEFAULT子句,则初始值为NULL .
局部变量被视为关于数据类型和溢出检查的存储例程参数 .
变量声明必须出现在游标或处理程序声明之前 .
局部变量名称不区分大小写 . 允许的字符和引用规则与其他标识符相同
局部变量的范围是BEGIN ... END块,在其中声明它 . 除了那些声明具有相同名称的变量的块之外,可以在嵌套在声明块中的块中引用该变量 .
对于在concat_ws函数中使用@variable来获取连接值的任何人,不要忘记使用空值重新初始化它 . 否则它可以使用旧值进行同一会话 .