MySQL数据库在众多表中对表名的查询及预处理存储过程(变量做表名)
以下的文章主要介绍的是MySQL数据库在众多表中进行表名与字段名的查询的实际操作步骤,以及对实现其查询所要用到的SQL 语句的介绍,还有两个实际解决方案的描述,以下就是文章的主要内容描述。
在MySQL 众多表中查找一个表名或者字段名的 SQL 语句:
- SELECT table_name, column_name from information_schema.columns WHERE column_name LIKE 'Name';
- SELECT TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_NAME LIKE '%_click' OR TABLE_NAME LIKE '%_open' OR TABLE_NAME LIKE '%_reg' AND table_schema = 'ad_flow';
MySQL数据库在众多表中查询表名和字段名,下面两种方法也可以查到:
- SELECT column_name from information_schema.columns WHERE column_name LIKE ’
%searchTerm%’ AND table_schema = ‘yourDB’ - SELECT column_name from information_schema.columns WHERE column_name LIKE ’
%searchTerm%’ AND table_schema = ‘yourDB’ AND table_name = ‘yourDBTable’
这样,我们在面多突然出现的那么多表时,就不会茫然失措了。
变量做表名 执行sql存储过程中会吧变量当做表名 所以得用预处理做
BEGIN
#Routine body goes here...
DECLARE ad_id INT;
DECLARE _done INT DEFAULT 0;
DECLARE ad_click INT DEFAULT 0;
DECLARE ad_open INT DEFAULT 0;#ip
DECLARE ad_reg INT DEFAULT 0;
DECLARE today INT;
DECLARE _cur CURSOR FOR
SELECT id FROM 027game.games_ad;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET _done = 1;
OPEN _cur;
REPEAT
FETCH _cur INTO ad_id;
IF NOT _done THEN
#查询id_click
SET @tmp_tablename = CONCAT('ad_flow.',ad_id,'_click');
SET @tmp_sql = CONCAT("SELECT COUNT(id) INTO @tmp_count1 FROM ",@tmp_tablename);
PREPARE stmt FROM @tmp_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET ad_click = @tmp_count1;
#查询id_open
SET @tmp_tablename = CONCAT('ad_flow.',ad_id,'_open');
SET @tmp_sql = CONCAT("SELECT COUNT(DISTINCT(ip)) INTO @tmp_count2 FROM ",@tmp_tablename);
PREPARE stmt FROM @tmp_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET ad_open = @tmp_count2;
#查询id_reg
SET @tmp_tablename = CONCAT('ad_flow.',ad_id,'_reg');
SET @tmp_sql = CONCAT("SELECT COUNT(id) INTO @tmp_count3 FROM ",@tmp_tablename);
PREPARE stmt FROM @tmp_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET ad_reg = @tmp_count3;
SET today = UNIX_TIMESTAMP(CURDATE());
#执行检查 看是更新还是插入 如果有数据 就进行更新 如果没有则插入
SET @tmp_sql = CONCAT("SELECT COUNT(id) INTO @ishave FROM 027game.games_ad_stat"," WHERE ad_id = ",ad_id," AND date =",today);
PREPARE stmt FROM @tmp_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
#执行插入或更新
IF NOT @ishave THEN
SET @tmp_sql = "INSERT INTO 027game.games_ad_stat (date,ip,click,reg,ad_id) VALUES (?,?,?,?,?)";
SET @a = today;
SET @b = ad_open;
SET @c = ad_click;
SET @d = ad_reg;
SET @e = ad_id;
PREPARE stmt FROM @tmp_sql;
EXECUTE stmt USING @a,@b,@c,@d,@e;
DEALLOCATE PREPARE stmt;
ELSE
SET @tmp_sql = "UPDATE 027game.games_ad_stat SET ip=?,click=?,reg=? WHERE ad_id = ? AND date = ?";
SET @a = ad_open;
SET @b = ad_click;
SET @c = ad_reg;
SET @d = ad_id;
SET @e = today;
PREPARE stmt FROM @tmp_sql;
EXECUTE stmt USING @a,@b,@c,@d,@e;
DEALLOCATE PREPARE stmt;
END IF;
END IF;
UNTIL _done END REPEAT;
CLOSE _cur;
END
BEGINDECLARE tablename VARCHAR(50);DECLARE _done INT DEFAULT 0;#Routine body goes here...#定义循环光标DECLARE _cur CURSOR FORSELECT TABLE_NAME FROM information_schema.`TABLES` WHERE (TABLE_NAME LIKE '%_click' OR TABLE_NAME LIKE '%_open' OR TABLE_NAME LIKE '%_reg') AND table_schema = 'ad_flow';#定义循环结束标记DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET _done = 1;OPEN _cur;#开始循环REPEATFETCH _cur INTO tablename ;IF NOT _done THENSET @clearsql = CONCAT('TRUNCATE ',tablename);PREPARE stmt FROM @clearsql;EXECUTE stmt;END IF;UNTIL _done END REPEAT;CLOSE _cur; END
转载于:https://www.cnblogs.com/lost-1987/articles/2737037.html
MySQL数据库在众多表中对表名的查询及预处理存储过程(变量做表名)相关推荐
- oracle查看表中记录数,Oracle 查询某一用户下所有表的记录数
要查询Oracle下某一个用户下所有表的记录条数,可以采用如下办法: 1.创建function count_tables_rows create or replace function count_t ...
- MYSQL存储过程中 使用变量 做表名--转
原文地址:http://blog.csdn.net/business122/article/details/7528859 今天写一个对数据库做快照的存储过程,用到了动态表名,突然发现MYSQL不支持 ...
- 已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在tab表中,要查的学生学号放在变量no中,查表结果放在变量english中。
已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在tab表中, 要查的学生学号放在变量no中,查表结果放在变量english中. data segmenttab db 68,78,42,84 ...
- mysql数据库,当数据类型是float时,查询居然查询不出数据来
mysql数据库,当数据类型是float时,查询居然查询不出数据来,类似如下: 以后mysql数据库不用float类型,而double类型可以查得出来. 转载于:https://www.cnblogs ...
- 使用sql语句将一张旧表中的数据取出并插入到另一张新表中(字段不对应),并将中文name转变为拼音存入到code中
要求:将公司旧项目中一个表的数据取出,全部放入到新项目的表中,两张表的字段是不对应的,数据有3446条,一条一条改,效率太低,所有这里采用的是sql语句进行操作 参考语法链接:SQL INSERT I ...
- python函数名是变量_Python 变量做函数名的简单示例
这篇文章主要为大家详细介绍了Python 变量做函数名的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! PHP ...
- xp 安装mysql数据库_Windows XP系统中安装MySQL5.5.28数据库图文教程
Windows XP系统中安装MySQL5.5.28数据库图文教程 2014-07-13 16:35来源:中国存储网 导读:MySQL数据库的安装一共分为两个部分:数据库的安装和数据库的配置.一.My ...
- mysql数据库 日志类型_MySQL中的日志类型(一)-摘要和日志的共同特征
MySQL中的日志类型(一)-摘要和日志的共同特征 发布时间:2020-07-12 19:56:15 来源:51CTO 阅读:506 作者:月饮沙 MySQL中的日志类型 MySQL具有多种日志,用来 ...
- MySQL数据库的终结_python中数据库的操作终结
1.什么是数据库: 数据库是按照数据结构来组织存储和管理数据的仓库 2.mysql用户设置: (1).进入数据库:mysql -u root -p 然后输入密码:xxxxx (2).里面有个user表 ...
最新文章
- R语言数据横向合并cbind函数实战
- html中content属性,CSS3的content属性用法详解
- Labview串口通信
- 【Linux】3.dpkg、apt安装卸载软件
- 区块链技术 好文收藏
- java类的命名规范_浅谈Java中的命名规范
- SMB MS17-010 利用(CVE-2017-0144 )
- Hadoop学习入门(二)——部署关键问题1:OpenSSH 密钥管理(1)
- VMware12虚拟机安装教程
- MATLAB代码:基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法 关键词:合作博弈 纳什谈判 风–光–氢系统 综合能源
- CSS3 background 与 渐变
- 2022基金定投数字货币理财程序源码
- 西班牙出差见闻之二(人情风俗)
- 完爆面试官!黑马学java学费多少
- PHP 文本式留言板源码
- 数据传输方式串行快于并行
- 07.RabbitMQ处理幂等性
- Android商城开发----viewPager实现广告轮播(在首页Fragment中实现)
- CRMEB后端身份管理接口
- Shell小干货学到就不亏