如果表不存在执行长查询

Posted

技术标签:

【中文标题】如果表不存在执行长查询【英文标题】:if table does not exist execute a long query 【发布时间】:2012-02-22 13:27:01 【问题描述】:

我正在使用 mysql 5.0+,如果表不存在,我正在尝试执行大量命令。所以我想拥有:

if not exist table
then
10000 line query that creates and populates the table with a lot of entries.
end if

唯一的问题是我一直在搜索,到目前为止我发现MySQL不支持这样的功能。

目前我有:

IF NOT EXISTS `profiles`
THEN
    A LOT OF QUERIES;
END IF;

由于某种原因,它不断给我错误,说第 1 行的语法错误。

所以我想知道是否有人碰巧对如何解决这个问题或如何解决这个问题有更好的想法。

【问题讨论】:

【参考方案1】:

你可以试试这样的:

select * from table1 where exists (select table_name from information_schema.tables where table_schema=database() and table_name = 'table1');

只有在当前数据库中存在 table1 时才会出现“select * from table1”。这是避免在不存在的表中查询信息的好方法,这会导致错误。您可以在存储过程之外运行它,并且需要将“存在的地方...”附加到您的每个查询中。请参阅http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html 了解更多信息。

【讨论】:

【参考方案2】:

添加到来自 bfavaretto 的代码,如果您确实有 information_schema.tables,请尝试以下操作:

IF NOT EXISTS (SELECT * FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename')
do your big long create table stuff

【讨论】:

【参考方案3】:

你可以试试

CREATE PROCEDURE test()
BEGIN
  DECLARE tmp INT;
  DECLARE CONTINUE HANDLER FOR  1146  -- 1146 - table does not exist
  BEGIN
     -- A lot of queries
  END;
  SELECT 1 INTO tmp FROM profiles LIMIT 1; -- INTO just to prevent any output
END;

【讨论】:

【参考方案4】:

您必须查询information_schema 数据库。在MySQL Forums找到这个答案:

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename';

【讨论】:

这似乎不相关 - 如果表不存在,OP 想知道如何有条件地执行一些其他 SQL。 @Alnitak,但知道表是否存在的唯一方法是查询 information_schema。他可能正在创建一个 PROCEDURE,因此他可以使用我发布的查询,将 table_name 分配给一个变量并基于此进行条件检查。

以上是关于如果表不存在执行长查询的主要内容,如果未能解决你的问题,请参考以下文章

如果表不存在,如何运行包含针对另一个 sql 实例上的表的查询的 If-Then-Else 语句?

使用 sqitch 中的 mysql 查询验证表不存在

(转)查询AB表中,A表中存在B表不存在的数据

SQL查询一个表中另外一个表不存在的数据-转

如果表不存在,我需要使用 sqlplus [重复] 运行脚本

PHP - MySQL - 表不存在