3

我得到以下信息:

Can't create table 'tempabcd' (errno: 22) 

此错误发生在以下查询(简化)运行数千次后

DROP TABLE IF EXISTS tempabcd;
CREATE TEMPORARY TABLE tempabcd (id int(11) NOT NULL, PRIMARY KEY (id)) ENGINE=MyISAM; 
INSERT INTO tempabcd VALUES ('1'),('2'),('3');
Select id from tempabcd
Union
Select id from othertable
DROP TABLE IF EXISTS tempabcd;

查询在开始时运行良好,但由于某种原因它在一段时间后失败。当错误发生时,所有新查询都返回相同的错误。

我已阅读MySQL CREATE TEMPORARY TABLE 错误,它说错误 22 是由于 MySQL 试图访问具有无效路径的文件,但是在这种情况下,此查询在遇到此错误之前成功运行了数千次 - 怎么会这样如果临时路径设置不正确?


ERRNO: 22 表示 MySQL 正在尝试访问具有无效路径的文件。MySQL 不太可能生成无效路径,因此您需要检查您的临时路径是否设置正确。

有关更多信息,请查看http://dev.mysql.com/doc/refman/5.5/en/temporary-files.html

还要检查这些行:-

CREATE TEMPORARY TABLE tempabcd (id int(11) NOT NULL, PRIMARY KEY (id)) .........
INSERT INTO tempabcd VALUES ('1','2','3'); <-- Passing 3 values here
4

3 回答 3

3

ERRNO: 22 表示 MySQL 正在尝试访问具有无效路径的文件。MySQL 不太可能生成无效路径,因此您需要检查您的临时路径是否设置正确。

有关更多信息,请查看http://dev.mysql.com/doc/refman/5.5/en/temporary-files.html

还要检查这些行:-

CREATE TEMPORARY TABLE tempabcd (id int(11) NOT NULL, PRIMARY KEY (id)) .........
INSERT INTO tempabcd VALUES ('1','2','3'); <-- Passing 3 values here
于 2013-06-27T12:29:56.310 回答
1

找出导致此问题的原因。在极少数情况下,创建的临时表不会包含任何行,并执行以下 sql:

DROP TABLE IF EXISTS tempabcd;
CREATE TEMPORARY TABLE tempabcd (id int(11) NOT NULL, PRIMARY KEY (id)) ENGINE=MyISAM; 
INSERT INTO tempabcd VALUES ();
..... 
DROP TABLE IF EXISTS tempabcd;

这会产生错误,但会创建临时表而不是删除临时表。然后在这个错误经常发生之后,达到打开文件限制并且错误

Can't create table '<table name>' (errno: 22) 

被退回。阻止查询插入 0 条记录解决了这个问题。

于 2013-06-28T13:17:12.883 回答
0

在查询的第 3 行中,您传递了 3 个值,因此您将获得

** 错误 1136 (21S01):列计数与第 1 行的值计数不匹配 **

于 2013-06-27T12:33:04.893 回答