无法创建表''(错误号:22)<table name =“”> </table>

时间:2013-06-27 12:27:15

标签: mysql

我得到以下内容:

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 Error,其中指出错误22是由于MySQL尝试访问具有无效路径的文件,但是在这种情况下,此查询在遇到此错误之前成功运行了数千次 - 这怎么可能如果临时路径设置不正确,是这种情况吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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条记录已经解决了这个问题。

答案 2 :(得分:0)

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

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