MySQL数据库在众多表中对表名的查询及预处理存储过程(变量做表名)

以下的文章主要介绍的是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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MTU MSS 详解记录

先学习理解一下帧的封装格式: 需要注意的是,区别两种帧封装格式:802标准帧和以太网帧1,在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括C R C检验码。RFC 1042(IEEE 802&a…

MySQL字符集的基本类型与统一字符集

以下的文章主要介绍的是MySQL字符集的基本类型, 统一字符集的实际操作方法,等相关内容的介绍,以下就是MySQL字符集的相关内容的描述,希望你会在以后的学习或是工作中带来很大的帮助。 一. MySQL字符集类型 MySQL服务器中有六个关键…

python socket发包_一个python发包的脚本

#codingutf-8Created on 2016年4月12日author: administraterfrom socket import *import timeHOST 172.16.6.70PORT 7125BUFSIZ 1024ADDR (HOST, PORT)def gatewatTcpClient():sock socket(AF_INET,SOCK_STREAM)sock.connect(ADDR)register_data 7e01004026018691830270…

通达oa 不允许从该ip登陆_通达OA-命令执行漏洞复现

通达OA-命令执行一、环境安装文件:链接:https://pan.baidu.com/s/1Y78Zs-7Igi4MRE0J_Dp-dQ 提取码:2b3i二、漏洞验证任意文件上传漏洞 /ispirit/im/upload.php本地文件包含漏洞 /ispirit/interface/gateway.php这两个路径不需要登录认证。burp抓包修改数据包上传文件…

mysql数据转存到时序数据库_干货丨如何高速迁移MySQL数据到时序数据库DolphinDB...

DolphinDB提供了两种导入MySQL数据的方法:ODBC插件和MySQL插件。我们推荐使用MySQL插件导入MySQL数据,因为它的速度比ODBC导入更快,导入6.5G数据,MySQL插件的速度是ODBC插件的4倍,并且使用MySQL插件无需任何配置&#…

优秀程序员的45个习惯

摘要:值得打印出来贴在办公室墙上学习实践的箴言。 优秀来自好的习惯。怎样成为优秀的开发人员?图灵公司最近热销的《高效程序员的45个习惯》一书给出了很好的解答,非常值得一读。 这本书的英文原版荣获了有软件奥斯卡之称的Jolt生产效率大奖…

python属性_深入理解python对象及属性

类属性和实例属性 首先来看看类属性和类实例的属性在python中如何存储,通过__dir__方法来查看对象的属性 >>> class Test(object): pass >>> test Test(http://www.my516.com) # 查看类属性 >>> dir(Test) [__class__,__delattr__,__di…

java 类型转换_java中的基本数据类型的转换

本文参考了如下两篇文章:Java中,经常可以遇到类型转换的场景,从变量的定义到复制、数值变量的计算到方法的参数传递、基类与派生类间的造型等,随处可见类型转换的身影。Java中的类型转换在Java编码中具有重要的作用。首先,来了解下…

Activity的四种加载模式(转载)

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模…

cubieboard 将linux debian 系统灌入Nand中的操作记录

下载地址:http://guillaumeplayground.net:81/share/debian_wheezy_armhf_v1_mele.img.gz 首先在WIN系统下使用Win32diskimager将debian_wheezy_armhf_v1_mele.img刷到TF卡中,然后把TF卡放入CB的TF卡槽,加电启动。 因为Debian已经自带了SS…

centos 安装tomcat_简单介绍Linux配置mysql,tomcat,Nginx 开机自启动的几个方式

概述一般我们打算把一些服务,例如 mysql,tomcat,Nginx设置开机自启动的话一般是有三四种方式来实现,下面以mysql,tomcat,Nginx做例子来演示。一、使用定时任务 cron 命令创建定时任务来运行 .sh 脚本。在sh…

java 永久代_Java新生代、老生代和永久代详解

前言: 还是面试经常被q,小结一下image.pngJVM中的堆一般分为三部分,新生代、老年代和永久代。1 新生代主要是用来存放新生的对象。一般占据堆空间的1/3,由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。新生代分为Ede…

java算法:冒泡排序

java算法:冒泡排序 冒泡排序:不断遍历文件,交换倒序的相邻元素,直到文件排好顺序。冒泡排序的主要优点是容易实现,冒泡排序通常会比选择排序、插入排序慢。 如,对EXAMPLE 字母进行排序: E X…

python3发布时间_Python3优雅操作-时间处理与定时任务

无论哪种编程语言,时间肯定都是非常重要的部分,今天来看一下python如何来处理时间和python定时任务 注意:本篇所讲是python3版本的实现,在python2版本中的实现略有不同 1.计算明天和昨天的日期 #! /usr/bin/env python #codingutf…

Cubieboard安装Debian在Nand中

本教程所附带系统为Server版,不带显示,所以插显示器是不会有任何画面出现的。另外所提供系统为 http://linux-sunxi.org 所推荐(linux-sunxi.org的权威毋庸置疑),非CB官方提供,但CB官方并未提供相关CB所用Server版,而且…

strlwr,strupr函数

函数原型&#xff1a;extern char *strlwr(char *str) extern char *strupr(char *s) 参数说明&#xff1a;str为要转换的字符串。 所在库名&#xff1a;#include <string.h> 函数功能&#xff1a;将字符串str中的大(小)写字母转换成为小(大)写字母&#xff…

为Cubieboard打造完美Debian系统

作为Cubieboard的用户&#xff0c;最头疼的问题就是没有一个比较好的系统&#xff0c;本文将帮你解决这个问题。 首先需要感谢网站http://guillaumeplayground.net/的作者制作了这个系统。不过由于是定制给mele的&#xff0c;所以在Cubieboard上运行需要做一些优化调整。 系统…

python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)

原标题 Understanding Python Dataclasses?—?Part 2 &#xff0c;作者为 Shikhar Chauhan 。这是 Python 最新的 Dataclasses 系列的第二部分内容。在第一部分里&#xff0c;我介绍了 dataclasses 的一般用法。这篇主要介绍另一个特征&#xff1a;dataclasses.field。我们已…

java 图形处理库_java中处理图片的类库

拷贝一下代码&#xff0c;以后备用&#xff1a;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servle…

Hibernate @OneToMany等注解设置查询过滤条件等

如实体PdOrg对象中有users对象&#xff0c;数据库user表有字段DEL_FLAG(0&#xff1a;删除&#xff1b;1&#xff1a;未删除)&#xff1a; private List<User> users new ArrayList<User>(); 生成get、set方法&#xff1a; OneToMany(fetchFetchType.LAZY, mappedB…