mysql删除表(如果在过程中存在)

mysql删除表(如果在过程中存在),mysql,procedure,sql-drop,Mysql,Procedure,Sql Drop,我正在尝试应用一个嵌套的集合模型示例和过程。我发现很多人使用这种技术,在这个过程中我发现了一个问题。每次调用该过程,我都会得到未知表XXX。当我创建这个过程时,我一点问题也没有。快速示例: CREATE PROCEDURE `sp_getRoleTree` (IN root INT) READS SQL DATA BEGIN DECLARE rows SMALLINT DEFAULT 0; DROP TABLE IF EXISTS ROLE_TREE; CREATE

我正在尝试应用一个嵌套的集合模型示例和过程。我发现很多人使用这种技术,在这个过程中我发现了一个问题。每次调用该过程,我都会得到
未知表XXX
。当我创建这个过程时,我一点问题也没有。快速示例:

CREATE PROCEDURE `sp_getRoleTree` (IN root INT)
  READS SQL DATA
BEGIN
    DECLARE rows SMALLINT DEFAULT 0;
    DROP TABLE IF EXISTS ROLE_TREE;
    CREATE TABLE ROLE_TREE (
        nodeID INT PRIMARY KEY
    ) ENGINE=HEAP;

    INSERT INTO ROLE_TREE VALUES (root);

    SELECT * FROM ROLE_TREE;
    DROP TABLE ROLE_TREE;
END;

所以我的问题是,我是否在这里做错了什么(这是示例代码),如果代码没有问题,我是否可以禁用if exists上的警告?过程中是否存在导致此类警告的特殊循环?

作为一种解决方法:尝试截断表而不是重新创建


不要使用
删除表格
/
创建表格
。创建此表一次(或在需要时),然后使用
TRUNCATE table
命令。

MySQL在使用
DROP table IF EXISTS tbl时生成警告当表不存在时。这可能会让人困惑,也许会违反直觉,但这是预期的行为

使用IF EXISTS可防止不存在的表发生错误。当使用IF EXISTS时,将为每个不存在的表生成注释。见第13.7.5.41节


IF-EXISTS防止MySQL抛出错误,这很好,但是如果表不存在,它会发出警告。没有抑制此警告的选项

你为什么需要这张桌子?如果您想从过程中输出数据集-只需运行选择查询。而不仅仅是数据集。。。一个嵌套集,用于分层数据父子孙关系。基本上,您可以创建一个表层次结构,该表层次结构可以获取以评估关系。上面的例子是实际程序的一部分。这似乎是一个可能的解决方案。尽管如此,不要不明白为什么彼得·布劳利(Peter Brawley)和亚瑟·富勒(Arthur Fuller)的《用MySQL完成5&6》一书解释了这种解决方案,却没有提到这种解决方案或错误。这是mysql错误吗?或者配置问题?看起来像是配置问题。谢谢,我在最后遵循了@Devart解决方案(在我看来,这似乎是程序运行时的逻辑),但您的额外信息总是有帮助的