Mysql中,判断表是否存在。
由于数据量过大,不同数据按月或按天存放,每月或每天自动生成数据表。
但是用户查询时间可能过长,所以,需要判断用户查询时间段内,表是否存在。
我想在整个SQL语句执行过程中,用while循环来检测表是否存在,这样比使用应用程序快些。之前在MSSQL上一直这么做,现在数据移植到MySQL上,使用while循环来做,总是不正确。
简单的说,我就是想在MySQL的SQL语句中(非函数、存储过程中)使用while循环,然后使用prepare 和 execute 执行动态的SQL语句。
求大侠帮助。
------解决方案-------------------- 代码是什么,什么版本?5.1以上,可以用系统表
------解决方案-------------------- 简单的说,我就是想在MySQL的SQL语句中(非函数、存储过程中)使用while循环,然后使用prepare 和 execute 执行动态的SQL语句
在MYSQL里,WHILE只能放到代码块里。让你失望了。
------解决方案-------------------- SQL code
DROP PROCEDURE IF EXISTS mydb.Clear_DB;
CREATE PROCEDURE mydb.`Clear_DB`(
)
BEGIN
DECLARE done INT DEFAULT 0; #游标的标志位
DECLARE a varchar(20);
DECLARE b varchar(20);
DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_name like 'http_200909%' ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO a;
IF NOT done THEN
set b=concat(b,'select * from ',a,' where name=http://scholar.google.com.hk union all'); # 拼 命令
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
SET @E=mid(b,1,length(b)-9); # 去掉最后一个UNION ALL
PREPARE stmt1 FROM @E;
EXECUTE stmt1; # 执行命令
DEALLOCATE PREPARE stmt1; #释放对象
END;
------解决方案-------------------- SELECT table_name FROM information_schema.TABLES WHERE table_name ='yourname'; 这个命令才是重点。
------解决方案-------------------- zuoxingyu这个存储过程用的刚刚的
------解决方案-------------------- 学习````````
------解决方案-------------------- MYSQL中无解。它不支持这种SQL语句。你的需求只能按四楼 zuoxingyu(差400分上北大) 的方法在存储过程中实现。 但在MYSQL中类似的情况应该是用分区表来实现,而不是实质上的分表。
------解决方案-------------------- MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html MySQL 5.1参考手册 第18章:分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 18.2.5. 子分区 18.2.6. MySQL分区处理NULL值的方式 18.3. 分区管理 18.3.1. RANGE和LIST分区的管理 18.3.2. HASH和KEY分区的管理 18.3.3. 分区维护 18.3.4. 获取关于分区的信息 本章讨论MySQL 5.1.中实现的分区。关于分区和分区概念的介绍可以在18.1节,“MySQL中的分区概述”中找到。MySQL 5.1 支持哪几种类型的分区,在18.2节,“分区类型” 中讨论。关于子分区在18.2.5节,“子分区” 中讨论。现有分区表中分区的增加、删除和修改的方法在18.3节,“分区管理” 中介绍。 和分区表一同使用的表维护命令在18.3.3节,“分区维护” 中介绍。 请注意:MySQL 5.1中的分区实现仍然很新(pre-alpha品质),此时还不是可生产的(not production-ready)。 同样,许多也适用于本章:在这里描述的一些功能还没有实际上实现(分区维护和重新分区命令),其他的可能还没有完全如所描述的那样实现(例如, 用于分区的数据目录(DATA DIRECTORY)和索引目录(INDEX DIRECTORY)选项受到Bug #13520) 不利的影响). 我们已经设法在本章中标出这些差异。在提出缺陷报告前,我们鼓励参考下面的一些资源: MySQL 分区论坛 这是一个为对MySQL分区技术感兴趣或用MySQL分区技术做试验提供的官方讨论论坛。来自MySQL 的开发者和其他的人,会在上面发表和更新有关的材料。它由分区开发和文献团队的成员负责监控。 分区缺陷报告 已经归档在缺陷系统中的、所有分区缺陷的一个列表,而无论这些缺陷的年限、严重性或当前的状态如何。根据许多规则可以对这些缺陷进行筛选,或者可以从MySQL缺陷系统主页开始,然后查找你特别感兴趣的缺陷。 Mikael Ronström's Blog MySQL分区体系结构和领先的开发者Mikael Ronström 经常在这里贴关于他研究MySQL 分区和MySQL簇的文章。 PlanetMySQL 一个MySQL 新闻网站,它以汇集MySQL相关的网誌为特点,那些使用我的MySQL的人应该对此有兴趣。我们鼓励查看那些研究MySQL分区的人的网誌链接,或者把你自己的网誌加到这些新闻报道中。 MySQL 5.1的二进制版本目前还不可用;但是,可以从BitKeeper知识库中获得源码。要激活分区,需要使用--with-分区选项编译服务器。关于建立MySQL 的更多信息,请参见2.8节,“使用源码分发版安装MySQL”。如果在编译一个激活分区的MySQL 5.1创建中碰到问题,可以在MySQL分区论坛中查找解决办法,如果在论坛中已经贴出的文章中没有找到问题的解决办法,可以在上面寻找帮助。 18.1. MySQL中的分区概述 本节提供了关于MySQL 5.1.分区在概念上的概述。 SQL标准在数据存储的物理方面没有提供太多的指南。SQL语言的使用独立于它所使用的任何数据结构或图表、表、行或列下的介质。但是,大部分高级数据库管理系统已经开发了一些根据文件系统、硬件或者这两者来确定将要用于存储特定数据块物理位置的方法。在MySQL中,InnoDB存储引擎长期支持表空间的概念,并且MySQL服务器甚至在分区引入之前,就能配置为存储不同的数据库使用不同的物理路径(关于如何配置的解释,请参见7.6.1节,“使用符号链接”)。