首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql drop table if exists inside

mysql drop table if exists inside
EN

Stack Overflow用户
提问于 2012-10-29 22:25:23
回答 2查看 11.4K关注 0票数 5

我正在尝试应用一个带有过程的嵌套set模型示例。我发现了许多使用这种技术的人,在这个过程中我发现了一个问题。每次我调用这个过程时,我都会得到unknown table XXX。当我创建这个过程时,我一点问题都没有。下面是一个快速示例:

代码语言:javascript
复制
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上的警告吗?过程中有没有一个特殊的循环导致了这类警告?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-29 23:35:22

变通办法:尝试截断表,而不是重新创建。

请勿使用DROP TABLE/CREATE TABLE。只需创建一次该表(或在需要时),然后使用TRUNCATE TABLE命令。

票数 3
EN

Stack Overflow用户

发布于 2013-02-15 01:58:17

如果表不存在,则在使用DROP TABLE IF EXISTS tbl;时,MySQL会生成警告。这可能会令人困惑,而且可能有悖于直觉,但这是预期的行为。

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

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

IF exist可以防止MySQL抛出错误,这很好,但是如果表不存在,它会发出警告。不存在取消显示此警告的选项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13123527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档