解决MySQL查询数据不一致诟病
最近出现一个很奇怪的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查询数据不一致诟病相关推荐
- mysql导入数据表越来越慢,快速解决mysql导数据时,格式不对、导入慢、丢数据的问题...
快速解决mysql导数据时,格式不对.导入慢.丢数据的问题 如果希望一劳永逸的解决慢的问题,不妨把你的mysql升级到mysql8.0吧,mysql8.0默认的字符集已经从latin1改为utf8mb ...
- php mysql存储中文为空_PHP如何解决MySQL存储数据中文乱码
PHP如何解决MySQL存储数据中文乱码?本文主要介绍了PHP+MySQL存储数据常见中文乱码问题,针对php+mysql常见的中文乱码问题予以总结分析,并给出了解决方法供大家参考.需要的朋友可以参考 ...
- 解决mysql导入数据文件过慢的问题
解决mysql导入数据文件过慢的问题 参考文章: (1)解决mysql导入数据文件过慢的问题 (2)https://www.cnblogs.com/rangzhi/p/12195708.html (3 ...
- 解决MySQL导入数据时遇到secure-file-priv的问题
解决MySQL导入数据时遇到secure-file-priv的问题 参考文章: (1)解决MySQL导入数据时遇到secure-file-priv的问题 (2)https://www.cnblogs. ...
- mysql 查询数据 程序_MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...
- mysql my.ini位置错误_解决mysql导入数据量很大导致失败及查找my.ini 位置(my.ini)在哪...
数据库数据量很大的数据库导入到本地时,会等很久,然而等很久之后还是显示失败: 这是就要看看自己本地的没mysql是否设置了超时等待,如果报相关time_out这些,可以把mysql.ini尾部添加ma ...
- MySQL 查询数据
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据. 语法 以下为在MyS ...
- mysql查询结果作为附件_python3+mysql查询数据并通过邮件群发excel附件
python3+mysql查询数据并通过邮件群发excel附件 来源:中文源码网 浏览: 次 日期:2018年9月2日 python3+mysql查询数据并通过邮件群发excel附件 本文 ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
最新文章
- 在 ASP.NET 中使用 HTTPHandler 实现 Front Controller
- python 0o10_Python 从业十年的程序员,写的万字经验分享
- react: nextJs koa project basic structure
- Node.js 多版本安装方式
- Linux——文件打包与压缩
- Android---手动创建线程与GUI线程同步(三)
- ASP.NET十分有用的页面间传值方法(转)
- springboot 日志级别_SpringBoot实战(十三):Admin动态修改日志级别
- AR9331中Linux内核启动中与IRQ中断相关的文件
- [转] new 和delete
- Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)​
- OpenCV-基本图形绘制(圆、矩形、椭圆)
- 服务器动态上下线监听案例
- Hive压缩存储(以Parquet为例)
- 应用安全 - 工具使用 - Nmap
- 向日葵设置开机自启动
- nginx的日志格式记录真实客户端IP
- 20220904小红书笔试
- List排序Sort和OrderBy方法(C#)
- 收集大家的想法,谢谢参与。。