我得到以下内容:
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尝试访问具有无效路径的文件,但是在这种情况下,此查询在遇到此错误之前成功运行了数千次 - 这怎么可能如果临时路径设置不正确,是这种情况吗?
答案 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行的值计数不匹配**