如何在mysql中声明变量,以便我的第二个查询可以使用它?
我想写一些像:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
答案 0 :(得分:516)
MySQL中主要有三种类型的变量:
User-defined variables(以@
为前缀):
您可以访问任何用户定义的变量,而无需声明或
初始化它。如果你引用一个尚未变量的变量
初始化时,它的值为NULL
和一种字符串。
SELECT @var_any_var_name
您可以使用SET
或SELECT
语句初始化变量:
SET @start = 1, @finish = 10;
或
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @finish;
可以从一组有限的数据中为用户变量分配值 类型:整数,十进制,浮点,二进制或非二进制字符串, 或NULL值。
用户定义的变量是特定于会话的。也就是说,用户 由一个客户定义的变量不能被其他客户看到或使用 客户端。
可以使用Advanced MySQL user variable techniques在SELECT
查询中使用它们。
Local Variables(无前缀):
之前需要使用DECLARE
声明局部变量
访问它。
它们可以用作局部变量和输入参数 在存储过程中:
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(以@@
为前缀):
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;
答案 1 :(得分:21)
SET
SET @var_name = value
OR
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值
答案 2 :(得分:11)
使用设置或选择
SELECT @price := MAX(product.price)
FROM product
示例:
{{1}}
答案 3 :(得分:2)
DECLARE var_name [,var_name] ... type [DEFAULT value] 该语句在存储的程序中声明局部变量。
实施例。 DECLARE id INT unsigned DEFAULT 1;
要为变量提供默认值,请包含DEFAULT子句。该值可以指定为表达式;它不一定是常数。如果缺少DEFAULT子句,则初始值为NULL。
对于数据类型和溢出检查,局部变量被视为存储的例程参数。
变量声明必须出现在游标或处理程序声明之前。
本地变量名称不区分大小写。允许的字符和引用规则与其他标识符相同
局部变量的范围是声明它的BEGIN ... END块。变量可以在嵌套在声明块中的块中引用,除了那些声明具有相同名称的变量的块。
答案 4 :(得分:2)
不同类型的变量:
DECLARE仅在BEGIN ... END复合语句中允许使用,并且必须在其开头,在任何其他语句之前。
因此,如果您要定义一个存储程序,并且确实想要一个“局部变量”,则需要删除@字符,并确保DECLARE语句位于程序块的开头。否则,要使用“用户变量”,请删除DECLARE语句。
此外,您还需要将查询括在括号中才能将其作为子查询执行:
SET @countTotal =(从nGrams中选择COUNT(*)个);
否则,您可以使用SELECT ... INTO:
从nGrams中选择COUNT(*)到@countTotal;
答案 5 :(得分:0)
对于在concat_ws函数中使用@variable来获取串联值的任何人,请不要忘记使用空值重新初始化它。否则,它可以将旧值用于同一会话。
1.x
答案 6 :(得分:0)
declare Regione int;
set Regione=(select id from users
where id=1) ;
select Regione ;
答案 7 :(得分:0)
声明:
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
layoutType,
0, // I HAVE CHANGED THIS FROM NOT FOCUS TO ZERO
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.START;
params.x = 0; // Initial Position of window
params.y = 100; // Initial Position of window
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mFloatingWidget, params);
用法:
SET @a = 1;