MySQL-我看不到数据,但是mysql说有行

时间:2018-07-10 08:23:03

标签: mysql transactions

我有表ip_per_nat_vlan,innodb格式。当我提供截断表时,表为空。

然后我有php脚本,它将数据填充到此表中。

该脚本何时完成且没有错误(简单插入状态),情况如下:

select * from ip_per_nat_vlan;

Empty set (0.00 sec)

select count(*) from ip_per_nat_vlan;

+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

show table status;

+----------------------------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+------------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
| Name                             | Engine | Version | Row_format | Rows     | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free  | Auto_increment | Create_time         | Update_time         | Check_time | Collation       | Checksum | Create_options | Comment |
+----------------------------------+--------+---------+------------+----------+----------------+-------------+-----------------+--------------+------------+----------------+---------------------+---------------------+------------+-----------------+----------+----------------+---------+
| ip_per_nat_vlan                  | InnoDB |      10 | Dynamic    |   141291 |            100 |    14172160 |               0 |      6832128 |   25165824 |         143563 | 2017-12-24 16:26:40 | 2018-06-13 09:01:33 | NULL       | utf8_unicode_ci |     NULL |

MySQL说,应该有14172160行,但我看不到任何行。哪里可能有问题?交易?但是我看不到任何正在运行的线程,也没有任何错误。

谢谢。 D

表的结构是:

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| ipAddress  | varchar(255) | NO   | UNI | NULL    |                |
| nat        | int(11)      | NO   |     | NULL    |                |
| vlan       | int(11)      | NO   |     | NULL    |                |
| district   | varchar(255) | YES  |     | NULL    |                |
| idOblasti  | int(11)      | YES  |     | NULL    |                |
| type       | varchar(255) | NO   |     | NULL    |                |
| macAddress | varchar(255) | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

2 个答案:

答案 0 :(得分:1)

有多种方法可以对表中的行进行“计数”。

正常方式。只需数一数即可。

select count(*) as table_rows from table_name ; 

准确性:查询运行时100%的准确计数。

使用information_schema表

select  table_rows
from    information_schema.tables
where   table_schema = 'database_name'
and   table_name = 'table_name' ;

准确度:仅是近似值。如果该表是频繁插入和删除的目标,则结果可能与实际计数相差甚远。通过更频繁地运行ANALYZE TABLE可以改善这一点。 效率:非常好,它根本不会碰到桌子。

由于计数选项是100%准确的,因此您的表不包含任何数据。 检查您的代码和MySQL的默认提交选项。

看起来您要插入行,但不提交行,请检查索引长度。

在此处查看更多详细信息

https://dba.stackexchange.com/questions/151769/mysql-difference-between-using-count-and-information-schema-tables-for-coun

答案 1 :(得分:0)

第一件事,我不确定mysql如何运行此行并产生结果

select count() from ip_per_nat_vlan

count()将返回[Err] 1064。 count(*),否则应在字段内提及字段名称。