Mysql预编译

 背景:
需要根据集群个数查询集群相关信息,但是集群个数是个动态值,那么应该怎么样办?
 
分析:
1)先查询出distinct clusterName的个数
2)然后根据查询出的个数来进行limit
 
使用了MySQL里面的两个知识:
1)预编译,语法如下
# 定义预处理语句
PREPARE stmt_name FROM preparable_stmt;

# 执行预处理语句
EXECUTE stmt_name [USING @var_name [, @var_name] ...];

# 删除(释放)定义
{DEALLOCATE | DROP} PREPARE stmt_name;

 

2)变量
set语句可用于向系统变量或用户变量赋值,针对用户变量的定义如下:
SET @var_name = expr [, @var_name = expr] ...

 

也可使用select语句来定义:
SELECT @var_name := expr [, @var_name = expr] ...

 

用户变量:以"@"开始,形式为"@var_name",以区分用户变量及列名。
它可以是任何随机的,复合的标量表达式,只要其中没有列指定
 
处理:
--定义查询集群信息的预编译
PREPARE s1 FROM 'select distinct(clusterName), Version, ts from m_fds_version order by ts desc limit ?';

--定义集群个数变量
select @limit_num:=count(distinct(clusterName)) from m_fds_version;

--执行预编译语句
EXECUTE s1 USING @limit_num;

--删除预编译
DROP PREPARE s1;

 

 

posted on 2021-01-09 23:22  gentleman_hai  阅读(216)  评论(0编辑  收藏  举报

导航