我正在尝试使用过程应用嵌套集模型示例。我发现很多人都使用这种技术,在这个过程中我发现了一个问题。每当我打电话给程序时,我都会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存在时禁用警告吗?在导致这种警告的程序中是否有特殊的循环?
答案 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抛出错误,这很好,但如果表不存在则会引发警告。没有选项可以禁止此警告。