【发布时间】:2015-07-02 19:48:18
【问题描述】:
我在装有 XAMPP Server 和 Mysql QueryBrowser 的 Windows 7 PC 上以管理员身份工作。数据库只是存储,除了我之外没有人在其中写入或读取。
这些语句按预期工作:
Select Col1, Col2, Col3 from Table1
Select Col1, Col2, Col3 from Table1 Group by Col1
以下每个陈述
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
给出以下输出
#1036 - Table 'Table1' is read only
Col1 和 Col2 上有索引,但 Col3 上没有。怎么可能?
编辑:我发现它与 GROUP BY 无关。从这些简单的查询中可以看出,更奇怪的是:
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 |
+----+-------------+----------------+-------+-----------------+--------+---------+------+----------+--------------------------+
工作正常。不过,
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 |
+----+-------------+----------------+------+---------------+------+---------+------+-----------+-------------+
给出错误
ERROR 1036 (HY000): Table 'Table1' is read only
感谢@Michael - sqlbot 的输入,还添加了EXPLAIN ... 输出。但是,一列如何导致文件系统权限的潜在问题而另一列不会?我检查了 XAMPP 目录中的 mysql_error 文件,但没有发现任何对我有帮助的东西。
【问题讨论】:
-
Group by通常是在聚合数据时,您不会在这里这样做。也许您的意思是ORDER BY而不是group by? -
不,我的意思是“分组依据”,需要“分组依据”
-
除非您聚合 Col2 和 Col3,否则该查询的输出将给您不可靠的结果。这个链接能回答你的问题吗? stackoverflow.com/questions/9575914/table-is-read-only
-
好的,但是上面的语法在除 mySQL 之外的任何数据库中都是无效的,因为它 extends the group by clause 所以你可以在 mySQL 中没有聚合但在其他地方没有。至于为什么这不起作用。我说不出来。
-
@doublelateralstickytape 我之前检查过链接,但我没有看到问题的原因,因为我可以在 Col1 上执行 SELECT ...GROUP BY。我没有看到将权限传递给表格列的选项?
标签: mysql