最近出现一个很奇怪的MySQL问题,使用不同select语句查询全部数据集居然得到不同的记录数.select * 得到4条记录,select 字段得到的是3条记录。

具体问题可以看下面的查询结果:
    mysql> select * from table_myisam;
    +----------+-------+-----------+------+
    | datetime | uid   | content   | type |
    +----------+-------+-----------+------+
    |        1 | uid_1 | content_1 |    1 |
    |        2 | uid_2 | content_2 |    1 |
    |        4 | uid_4 | content_4 |    1 |
    |        3 | uid_3 | content_3 |    1 |
    +----------+-------+-----------+------+
    4 rows in set (0.00 sec)
    mysql> select uid from table_myisam;
    +-------+
    | uid   |
    +-------+
    | uid_1 |
    | uid_2 |
    | uid_4 |
    +-------+
    3 rows in set (0.00 sec)

通过select uid只得到3行记录,丢失了其中uid='uid_3‘的记录.本来百思不得其解,后来在同事的提醒下使用了check table,才找到问题的所在.
    mysql> check table table_myisam;
    +--------------------+-------+----------+-------------------------------------------------------+
    | Table              | Op    | Msg_type | Msg_text                                              |
    +--------------------+-------+----------+-------------------------------------------------------+
    | qitai.table_myisam | check | warning  | 1 client is using or hasn't closed the table properly |
    | qitai.table_myisam | check | warning  | Size of indexfile is: 2049      Should be: 2048       |
    | qitai.table_myisam | check | error    | Found 3 keys of 4                                     |
    | qitai.table_myisam | check | error    | Corrupt                                               |
    +--------------------+-------+----------+-------------------------------------------------------+

查询数据不一致的原因是table_myisam的索引文件损坏了,对应的索引文件table_myisam.MYI与数据文件 table_myisam.MYD不一致.select *并不需要遍历每个索引项,只需要获取第一条记录,根据链表顺序访问,因此当前的索引损坏并没有影响到select *的使用.而select uid需要遍历所有索引项,因而只获取到损坏状态,三条索引记录。

 解决方案是使用repair table进行表索引的修复。
    mysql> repair table table_myisam;
    +--------------------+--------+----------+----------+
    | Table              | Op     | Msg_type | Msg_text |
    +--------------------+--------+----------+----------+
    | qitai.table_myisam | repair | status   | OK       |
    +--------------------+--------+----------+----------+
    1 row in set (0.00 sec)

修复后使用check table可以看到表状态变成正常,使用select *与select uid都能获取到4条记录.
    mysql> check table table_myisam;
    +--------------------+-------+----------+----------+
    | Table              | Op    | Msg_type | Msg_text |
    +--------------------+-------+----------+----------+
    | qitai.table_myisam | check | status   | OK       |
    +--------------------+-------+----------+----------+
    1 row in set (0.00 sec)

解决MySQL查询数据不一致诟病相关推荐

  1. mysql导入数据表越来越慢,快速解决mysql导数据时,格式不对、导入慢、丢数据的问题...

    快速解决mysql导数据时,格式不对.导入慢.丢数据的问题 如果希望一劳永逸的解决慢的问题,不妨把你的mysql升级到mysql8.0吧,mysql8.0默认的字符集已经从latin1改为utf8mb ...

  2. php mysql存储中文为空_PHP如何解决MySQL存储数据中文乱码

    PHP如何解决MySQL存储数据中文乱码?本文主要介绍了PHP+MySQL存储数据常见中文乱码问题,针对php+mysql常见的中文乱码问题予以总结分析,并给出了解决方法供大家参考.需要的朋友可以参考 ...

  3. 解决mysql导入数据文件过慢的问题

    解决mysql导入数据文件过慢的问题 参考文章: (1)解决mysql导入数据文件过慢的问题 (2)https://www.cnblogs.com/rangzhi/p/12195708.html (3 ...

  4. 解决MySQL导入数据时遇到secure-file-priv的问题

    解决MySQL导入数据时遇到secure-file-priv的问题 参考文章: (1)解决MySQL导入数据时遇到secure-file-priv的问题 (2)https://www.cnblogs. ...

  5. mysql 查询数据 程序_MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  6. mysql my.ini位置错误_解决mysql导入数据量很大导致失败及查找my.ini 位置(my.ini)在哪...

    数据库数据量很大的数据库导入到本地时,会等很久,然而等很久之后还是显示失败: 这是就要看看自己本地的没mysql是否设置了超时等待,如果报相关time_out这些,可以把mysql.ini尾部添加ma ...

  7. MySQL 查询数据

    MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...

  8. mysql查询结果作为附件_python3+mysql查询数据并通过邮件群发excel附件

    python3+mysql查询数据并通过邮件群发excel附件 来源:中文源码网    浏览: 次    日期:2018年9月2日 python3+mysql查询数据并通过邮件群发excel附件 本文 ...

  9. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

最新文章

  1. 在 ASP.NET 中使用 HTTPHandler 实现 Front Controller
  2. python 0o10_Python 从业十年的程序员,写的万字经验分享
  3. react: nextJs koa project basic structure
  4. Node.js 多版本安装方式
  5. Linux——文件打包与压缩
  6. Android---手动创建线程与GUI线程同步(三)
  7. ASP.NET十分有用的页面间传值方法(转)
  8. springboot 日志级别_SpringBoot实战(十三):Admin动态修改日志级别
  9. AR9331中Linux内核启动中与IRQ中断相关的文件
  10. [转] new 和delete
  11. Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)​
  12. OpenCV-基本图形绘制(圆、矩形、椭圆)
  13. 服务器动态上下线监听案例
  14. Hive压缩存储(以Parquet为例)
  15. 应用安全 - 工具使用 - Nmap
  16. 向日葵设置开机自启动
  17. nginx的日志格式记录真实客户端IP
  18. 20220904小红书笔试
  19. List排序Sort和OrderBy方法(C#)
  20. 收集大家的想法,谢谢参与。。

热门文章

  1. 制作linux usb安裝,如何在Linux上安装和使用Etcher来制作Linux临场USB
  2. Mybatis面试题-日更
  3. Python注释风格--Google风格
  4. Ballast,一种精准控制 Go GC 提高性能的方法
  5. 万字长文剖析Redis分布式锁到底安不安全
  6. Ionic 4.0.2 发布,移动应用开发框架
  7. 2.Spring Boot 入门
  8. 面向微软合作伙伴和客户的Azure应用托管正式可用
  9. 《树莓派开发实战(第2版)》——2.9 利用RDP远程控制树莓派
  10. MySQL 主从复制 复制过滤