mysql drop table如果存在于程序内部

时间:2012-10-29 14:25:23

标签: mysql procedure sql-drop

我正在尝试使用过程应用嵌套集模型示例。我发现很多人都使用这种技术,在这个过程中我发现了一个问题。每当我打电话给程序时,我都会unknown table 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存在时禁用警告吗?在导致这种警告的程序中是否有特殊的循环?

2 个答案:

答案 0 :(得分:3)

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

请勿使用DROP TABLE / CREATE TABLE。创建此表一次(或在需要时)并使用TRUNCATE TABLE命令。

答案 1 :(得分:2)

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

来自http://dev.mysql.com/doc/refman/5.5/en/drop-table.html

  

使用IF EXISTS防止对不存在的表发生错误。使用IF EXISTS时,会为每个不存在的表生成注释。见第13.7.5.41节SHOW WARNINGS Syntax

如果EXISTS阻止MySQL抛出错误,这很好,但如果表不存在则会引发警告。没有选项可以禁止此警告。