Mysql“select * from”不返回所有行
Posted
技术标签:
【中文标题】Mysql“select * from”不返回所有行【英文标题】:Mysql "select * from" doesn't return all rows 【发布时间】: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 解决了这个问题!
【参考方案1】:
一般来说,MyISAM 表格式是非常可靠的,但表有时会由于各种原因而损坏,例如硬件故障、mysqld 进程在写入操作进行时被杀死、不合时宜地关闭或 MySQL 或 MyISAM 代码中的错误。如果您使用的是非常旧的版本,则可能会出现错误。
建议您在修复之前进行备份。修复
REPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE
tbl_name [, tbl_name] ...
[QUICK] [EXTENDED] [USE_FRM]
【讨论】:
看起来简短的答案已经在 cmets 中了。但我最初错过了它,所以这可能会对某人有所帮助。 现在是@ReinstateMonica3167040 ;)以上是关于Mysql“select * from”不返回所有行的主要内容,如果未能解决你的问题,请参考以下文章
试图制作返回 mysql 'SELECT * FROM' 结果的函数,最终返回 undefined