MySQL的“select * from”未返回所有行

8
我习惯使用PostgreSQL,不理解MySQL的这种行为。
这个表(来自SugarCRM)有3057行:
mysql> SELECT  count(*) FROM tasks ;
+----------+
| count(*) |
+----------+
|     3057 |
+----------+

但是当运行 SELECT * FROM tasks 时:
mysql> SELECT * FROM tasks ;
...
2344 rows in set (0,02 sec)

我正在使用一个相当老的MySQL版本,但问题是我只是想将数据库导出并恢复到新版本。

# mysql --version
mysql  Ver 14.14 Distrib 5.1.51, for slackware-linux-gnu (x86_64) using  EditLine wrapper

你有什么想法吗?


如果您尝试执行 SELECT * FROM tasks LIMIT 4000;,会发生什么? - Eran
1
你的表是MYISAM吗?我问这个问题是因为这篇文章:http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/ - Samsquanch
你能展示一下你的模式吗? - MMM
8
如果这是一个MyISAM表格,请尝试运行REPAIR TABLE tbl_name命令来修复它。 - Vatev
2
谢谢@Vatev,REPAIR TABLE 解决了这个问题! - Maicon Vinicius Nunes
显示剩余5条评论
1个回答

5

通常情况下,MyISAM表格式非常可靠,但由于各种原因(如硬件故障、在写操作进行时杀死mysqld进程、不及时的关闭或MySQL或MyISAM代码中的错误),表有时会损坏。如果您使用的是非常旧的版本,则可能存在错误。

在修复之前建议备份。要进行修复:

REPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE
tbl_name [, tbl_name] ...
[QUICK] [EXTENDED] [USE_FRM]

1
看起来短答案已经在评论中了。但是我一开始错过了,所以这可能会帮助到某些人。 - Vikas
1
现在是 @ReinstateMonica3167040 ;) - Maicon Vinicius Nunes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接