MySQL查询全部数据集结果不一致问题解决方案

时间:2024-01-21 23:51:20 

最近出现一个很奇怪的MySQL问题,使用不同select语句查询全部数据集居然得到不同的记录数。select * 得到4条记录,select 字段得到的是3条记录。
具体问题可以看下面的查询结果:  
[sql]
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,才找到问题的所在。
[sql]
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进行表索引的修复。
[sql]
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条记录。
[sql]
mysql> check table table_myisam; 
+--------------------+-------+----------+----------+ 
| Table  | Op| Msg_type | Msg_text | 
+--------------------+-------+----------+----------+ 
| qitai.table_myisam | check | status   | OK   | 
+--------------------+-------+----------+----------+ 
1 row in set (0.00 sec) 

标签:查询,数据,不一致
0
投稿

猜你喜欢

  • Vue中父组件向子组件通信的方法

    2024-04-26 17:37:32
  • 使用python批量修改XML文件中图像的depth值

    2023-03-05 12:59:06
  • python数据可视化的那些操作你了解吗

    2023-11-04 15:18:55
  • PyQt5实现简单的计算器

    2022-09-27 07:44:39
  • asp中的rs.open于conn.execute的区别

    2009-10-29 12:12:00
  • 详解Python中contextlib上下文管理模块的用法

    2022-03-10 22:32:51
  • python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例

    2022-09-27 13:07:54
  • Golang 中反射的应用实例详解

    2024-02-12 03:12:06
  • laravel添加前台跳转成功页面示例

    2023-11-20 15:22:18
  • Javascript浅拷贝与深拷贝实现

    2013-07-16 22:47:46
  • MySQL 5.7.30 安装与升级问题详细教程

    2024-01-21 09:42:40
  • VC基于ADO技术访问数据库的方法

    2024-01-28 22:25:08
  • python读取和保存图片5种方法对比

    2022-05-27 23:54:32
  • 防止网站被采集的理论分析以及十条方法对策第1/2页

    2011-03-29 10:38:00
  • 解决Vue警告Write operation failed:computed value is readonly

    2024-04-09 10:49:25
  • 三达不溜:www

    2009-03-28 11:44:00
  • Python跨文件全局变量的使用技巧

    2023-09-17 00:00:31
  • golang 实用库gotable的具体使用

    2024-04-27 15:31:48
  • Python人工智能学习PyTorch实现WGAN示例详解

    2022-10-20 18:49:32
  • vue2 vue3中使用Echarts详细

    2024-05-09 15:23:37
  • asp之家 网络编程 m.aspxhome.com