MySQL查询数据分歧样难点

发布时间:2019-06-22  栏目:NoSQL  评论:0 Comments

+——-+  

多年来出现三个很奇异的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) 

+——————–+——-+———-+——————————————————-+
 

http://www.bkjia.com/Mysql/343085.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/343085.htmlTechArticle最近出现一个很奇怪的MySQL问题,使用不同select语句查询全部数据集居然得到不同的记录数。select
* 获得4条记下,select 字段获得的是3条记…

+——————–+——-+———-+———-+  

+——-+  

  

| uid_1 |  

| qitai.table_myisam | check | error    | Found 3 keys of 4            
                        |  

| qitai.table_myisam | repair | status   | OK       |  

| Table              | Op    | Msg_type | Msg_text                    
                         |  

| datetime | uid   | content   | type |  

mysql> repair table table_myisam;  

+——————–+——-+———-+———-+  

1 row in set (0.00 sec)  

 

    通过select
uid只收获3行记录,丢失了当中uid=’uid_3’的记录。本来百思不得其解,后来在同事的提示下使用了check
table,才找到题指标所在。

mysql> select uid from table_myisam;  

|        4 | uid_4 | content_4 |    1 |  

| qitai.table_myisam | check | warning  | Size of indexfile is: 2049  
   Should be: 2048       |  

    修复后接纳check table可以见见表情形变为健康,使用select *与select
uid都能博获得4条记下。

+———-+——-+———–+——+  

+——————–+——–+———-+———-+  

|        3 | uid_3 | content_3 |    1 |  

[sql] 

+——————–+——-+———-+———-+  

4 rows in set (0.00 sec)  

 

近来出现三个很想获得的MySQL难题,使用分裂select语句询问任何数额集居然获得分化
的记录数。select * 获得4条记下,select 字段获得的是3条记下。

| qitai.table_myisam | check | status   | OK       |  

| qitai.table_myisam | check | warning  | 1 client is using or hasn’t
closed the table properly |  

| uid_4 |  

| uid_2 |  

+——————–+——-+———-+——————————————————-+
 

    具体难点能够看上面包车型客车询问结果: www.2cto.com  

   
查询数据差异的原由是table_myisam的目录文件损坏了,对应的目录文件table_myisam.MYI与数据文件table_myisam.MYD不一致。select
*并无需遍历每一种索引项,只须要得到第一条记下,依据链表顺序访问,因而当前的目录损坏并不曾影响到select
*的使用。而select
uid须要遍历全体索引项,因此只获得到损坏意况,三条索引记录。

   消除方案是应用repair table实行表索引的修复。

+———-+——-+———–+——+  

mysql> check table table_myisam;  

+——————–+——–+———-+———-+  

|        2 | uid_2 | content_2 |    1 |  

| Table              | Op     | Msg_type | Msg_text |  

|        1 | uid_1 | content_1 |    1 |  

 

1 row in set (0.00 sec)  

+——————–+——-+———-+——————————————————-+
 

[sql] 

mysql> select * from table_myisam;                                 

+———-+——-+———–+——+  

| qitai.table_myisam | check | error    | Corrupt                      
                        |  

+——————–+——–+———-+———-+  

http://www.bkjia.com/Mysql/488354.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/488354.htmlTechArticleMySQL查询数据不一致问题
近期出现一个很意外的MySQL难点,使用不相同select语句询问任何数目集居然得到不一致的记录数。select * 得到4条记录,…

MySQL查询数据不等同难题

| Table              | Op    | Msg_type | Msg_text |  

[sql] 

[sql] 

+——-+  

mysql> check table table_myisam;  

3 rows in set (0.00 sec)  

| uid   |  

留下评论

网站地图xml地图