首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:由“表是只读”错误引起的SELECT...GROUP

问MySQL:由“表是只读”错误引起的SELECT...GROUP
EN

Stack Overflow用户
提问于 2015-07-02 19:48:18
回答 1查看 384关注 0票数 0

我在Windows7PC上做管理员,使用XAMPP和Mysql QueryBrowser。数据库是只存储的,除了我,没有人在数据库中写入或读取数据库。

这些声明如预期的那样起作用:

代码语言:javascript
复制
Select Col1, Col2, Col3 from Table1 
Select Col1, Col2, Col3 from Table1 Group by Col1

下列每一项声明

代码语言:javascript
复制
Select Col1, Col2, Col3 from Table1 Group by Col2
Select Col1, Col2, Col3 from Table1 Group by Col3
Select Col1, Col2, Col3 from Table1 Group by Col1,Col2,Col3

给出以下输出

代码语言:javascript
复制
#1036 - Table 'Table1' is read only 

在Col1和Col2上有一个索引,而在Col3上没有。这怎么可能呢?

编辑:我发现它与GROUP无关。从这些简单的查询中可以看出,更奇怪的是:

代码语言:javascript
复制
SELECT count(*) FROM Table1 where Col2 > 3000;


EXPLAIN SELECT count(*) FROM Table1 where Col2 > 3000;
+----+-------------+----------------+-------+-----------------+--------+-----    +------+----------+--------------------------+
| id | select_type | table          | type  | possible_keys   | key    | key_len | ref  | rows     | Extra                    |
+----+-------------+----------------+-------+-----------------+--------+---------+------+----------+--------------------------+
|  1 | SIMPLE      | Table1         | range | Col2,Col7       | Col2   | 4       | NULL | 22315581 | Using where; Using index |
+----+-------------+----------------+-------+-----------------+--------+---------+------+----------+--------------------------+

效果很好。然而,

代码语言:javascript
复制
SELECT count(*) FROM Table1 where Col4 > '2009-01-01';

EXPLAIN SELECT count(*) FROM Table1 where Col4 > '2009-01-01';

+----+-------------+----------------+------+---------------+------+---------+------+-----------+-------------+
| id | select_type | table          | type | possible_keys | key  | key_len | ref  | rows      | Extra       |
+----+-------------+----------------+------+---------------+------+---------+------+-----------+-------------+
|  1 | SIMPLE      | Table1         | ALL  | NULL          | NULL | NULL    | NULL | 237089257 | Using where |
+----+-------------+----------------+------+---------------+------+---------+------+-----------+-------------+

给出误差

代码语言:javascript
复制
ERROR 1036 (HY000): Table 'Table1' is read only

我感谢@Michael -sqlbot的输入,并添加了EXPLAIN ...输出。然而,在那里,一个列如何导致文件系统权限的潜在问题,而另一个列却没有?我检查了XAMPP目录中的mysql_error文件,但没有发现任何帮助我的地方。

EN

回答 1

Stack Overflow用户

发布于 2015-07-03 19:35:03

你说:

在Col1和Col2上有一个索引,而在Col3上没有。这怎么可能呢?

我假设您的意思是只有一个索引(col1,col2)。此索引可用于GROUP BY col1,但不能用于任何其他分组。

EXPLAIN SELECT应该显示,失败的查询正在按照分组的using temporary, using filesort方式进行操作,这意味着只读取的不是基表本身,而是无法使用索引的临时表遇到的操作系统权限问题。

因此,它不是阻止您运行查询的MySQL,而是阻止MySQL对临时表进行所需操作的Windows。大概是文件系统权限。

MySQL错误日志中也可能有有用的消息。

https://dev.mysql.com/doc/refman/5.6/en/temporary-files.html

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

https://stackoverflow.com/questions/31193411

复制
相关文章

相似问题

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