以下的文章主要介绍的是MySQL数据库在众多表中进行表名与字段名的查询的实际操作步骤,以及对实现其查询所要用到的SQL 语句的介绍,还有两个实际解决方案的描述,以下就是文章的主要内容描述。

在MySQL 众多表中查找一个表名或者字段名的 SQL 语句:

  1. SELECT table_name, column_name from information_schema.columns WHERE column_name LIKE 'Name';
  2. 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数据库在众多表中查询表名和字段名,下面两种方法也可以查到:

  1. SELECT column_name from information_schema.columns WHERE column_name LIKE ’
    %searchTerm%’ AND table_schema = ‘yourDB’
  2. 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数据库在众多表中对表名的查询及预处理存储过程(变量做表名)相关推荐

  1. oracle查看表中记录数,Oracle 查询某一用户下所有表的记录数

    要查询Oracle下某一个用户下所有表的记录条数,可以采用如下办法: 1.创建function count_tables_rows create or replace function count_t ...

  2. MYSQL存储过程中 使用变量 做表名--转

    原文地址:http://blog.csdn.net/business122/article/details/7528859 今天写一个对数据库做快照的存储过程,用到了动态表名,突然发现MYSQL不支持 ...

  3. 已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在tab表中,要查的学生学号放在变量no中,查表结果放在变量english中。

    已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在tab表中, 要查的学生学号放在变量no中,查表结果放在变量english中. data segmenttab db 68,78,42,84 ...

  4. mysql数据库,当数据类型是float时,查询居然查询不出数据来

    mysql数据库,当数据类型是float时,查询居然查询不出数据来,类似如下: 以后mysql数据库不用float类型,而double类型可以查得出来. 转载于:https://www.cnblogs ...

  5. 使用sql语句将一张旧表中的数据取出并插入到另一张新表中(字段不对应),并将中文name转变为拼音存入到code中

    要求:将公司旧项目中一个表的数据取出,全部放入到新项目的表中,两张表的字段是不对应的,数据有3446条,一条一条改,效率太低,所有这里采用的是sql语句进行操作 参考语法链接:SQL INSERT I ...

  6. python函数名是变量_Python 变量做函数名的简单示例

    这篇文章主要为大家详细介绍了Python 变量做函数名的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! PHP ...

  7. xp 安装mysql数据库_Windows XP系统中安装MySQL5.5.28数据库图文教程

    Windows XP系统中安装MySQL5.5.28数据库图文教程 2014-07-13 16:35来源:中国存储网 导读:MySQL数据库的安装一共分为两个部分:数据库的安装和数据库的配置.一.My ...

  8. mysql数据库 日志类型_MySQL中的日志类型(一)-摘要和日志的共同特征

    MySQL中的日志类型(一)-摘要和日志的共同特征 发布时间:2020-07-12 19:56:15 来源:51CTO 阅读:506 作者:月饮沙 MySQL中的日志类型 MySQL具有多种日志,用来 ...

  9. MySQL数据库的终结_python中数据库的操作终结

    1.什么是数据库: 数据库是按照数据结构来组织存储和管理数据的仓库 2.mysql用户设置: (1).进入数据库:mysql -u root -p 然后输入密码:xxxxx (2).里面有个user表 ...

最新文章

  1. R语言数据横向合并cbind函数实战
  2. html中content属性,CSS3的content属性用法详解
  3. Labview串口通信
  4. 【Linux】3.dpkg、apt安装卸载软件
  5. 区块链技术 好文收藏
  6. java类的命名规范_浅谈Java中的命名规范
  7. SMB MS17-010 利用(CVE-2017-0144 )
  8. Hadoop学习入门(二)——部署关键问题1:OpenSSH 密钥管理(1)
  9. VMware12虚拟机安装教程
  10. MATLAB代码:基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法 关键词:合作博弈 纳什谈判 风–光–氢系统 综合能源
  11. CSS3 background 与 渐变
  12. 2022基金定投数字货币理财程序源码
  13. 西班牙出差见闻之二(人情风俗)
  14. 完爆面试官!黑马学java学费多少
  15. PHP 文本式留言板源码
  16. 数据传输方式串行快于并行
  17. 07.RabbitMQ处理幂等性
  18. Android商城开发----viewPager实现广告轮播(在首页Fragment中实现)
  19. CRMEB后端身份管理接口
  20. Shell小干货学到就不亏

热门文章

  1. iOS 里const在修饰对象时候的用法
  2. java通用分页条件查询_通用分页查询
  3. 根据输入的日期计算周次和月份
  4. spring 多线程 事务的实际应用场景
  5. JavaScript 严格模式(use strict)
  6. 【bug】HbuilderX运行到微信小程序 报错
  7. Oracle不连续的值,如何实现查找上一条、下一条
  8. docker安装postgres
  9. mongoose 定义经纬度数据类型
  10. 计算机网络西北大学,西北大学计算机网络复习资料 (拟).doc