2015-07-02 14 views
0

我在Windows 7 PC上使用XAMPP Server和Mysql QueryBrowser作爲管理員工作。數據庫僅存儲,沒有人寫入或從中讀取,除了我。MySQL:SELECT ... GROUP BY導致「表是隻讀」錯誤

這些語句按預期工作:

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 

我感謝@邁克爾 - sqlbot的輸入,也加入EXPLAIN ...輸出。但是,那裏列怎麼會導致文件系統權限的潛在問題,而另一列又不會呢?我檢查了XAMPP目錄中的mysql_error文件,但是我沒有發現任何幫助我的東西。

+0

'集團by'通常是合併數據時,你不這樣做,在這裏。也許你的意思是'ORDER BY'而不是'group by'? – xQbert

+0

不,我的意思是「group by」,並且需要「group by」 –

+0

除非您正在彙總Col2和Col3,否則該查詢的輸出會給您帶來不可靠的結果。這個鏈接是否回答你的問題? HTTP://計算器。com/questions/9575914/table-is-read-only – doublesidedstickytape

回答

1

你說:

有col1和col2上,但不是在COL3的索引。怎麼可能?

我認爲你的意思是在(col1,col2)上有一個索引。該索引可用於GROUP BY col1,但不適用於任何其他分組。

EXPLAIN SELECT應該顯示失敗的查詢正在沿着using temporary, using filesort這一行進行分組,其含義是它不是基本表本身是隻讀的,而是發生了什麼是操作系統權限問題正在遇到無法使用索引的分組所需的臨時表。

因此,它不是MySQL阻止你運行查詢,它是Windows阻止MySQL執行臨時表所需的操作。推測文件系統權限。

在MySQL錯誤日誌中也可能有有用的消息。

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

+0

謝謝,我更新了我的帖子。它與'GROPU BY'語句無關,它更一般。也許桌子損壞了? –