【问题标题】:Mysql "select * from" doesn't return all rowsMysql“select * from”不返回所有行
【发布时间】:2014-09-02 05:26:31
【问题描述】:

我习惯了 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;会发生什么?
  • 相同结果:2344 rows in set (0,02 sec)
  • 你的桌子是MYISAM吗?因为这篇文章我问:mysqlperformanceblog.com/2007/04/10/count-vs-countcol
  • 如果是 MyISAM 表,请尝试运行 REPAIR TABLE tbl_name
  • 谢谢@Vatev,REPAIR TABLE 解决了这个问题!

标签: mysql sql select count rows


【解决方案1】:

一般来说,MyISAM 表格式是非常可靠的,但表有时会由于各种原因而损坏,例如硬件故障、mysqld 进程在写入操作进行时被杀死、不合时宜地关闭或 MySQL 或 MyISAM 代码中的错误。如果您使用的是非常旧的版本,则可能会出现错误。

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

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

【讨论】:

  • 看起来简短的答案已经在 cmets 中了。但我最初错过了它,所以这可能会对某人有所帮助。
  • 现在是@ReinstateMonica3167040 ;)
猜你喜欢
  • 2013-11-04
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多