【问题标题】:Missing rows when duplicating data from another table using MySQL使用 MySQL 从另一个表复制数据时丢失行
【发布时间】:2018-03-16 07:02:31
【问题描述】:

INSERT cash_transaction2017 SELECT * FROM cash_transaction WHERE created_at < "2018-01-01 00:00:00"

以上是我执行的脚本的结果,总行数为 336,090。

但是,当我从 phpMyAdmin 浏览表格时,我只能看到 334,473 行。

cash_transaction2017表中的行按升序排序后,我发现有些行丢失了,因为最后一个created_datecash_transaction的不同。

为什么会这样?无论我是从 mysql 控制台执行脚本,还是使用 php 代码,结果都是一样的。

我还尝试将 mysqldump 与 --skip-tz-utc 一起使用,但它也缺少一些行。

更新

SELECT count(*) FROM `cash_transaction2017`
SELECT count(*) FROM `cash_transaction` WHERE created_at < "2018-01-01 00:00:00"

显然执行这 2 个查询给了我相同数量的行,但是,这 2 个查询的最后一行是不同的。请看下面的截图:

更新 2

由于两个表都是事务表,所以如果它们的总金额相同,则应该表示它们的行数相同,没有任何数据丢失。

所以我在两张桌子上都尝试了SELECT SUM(amount),结果发现两张桌子在SUM(amount)中的总金额相同

所以现在的问题是,实际上是否有任何缺失的行?出现这个问题是不是因为我用的是innodb?

【问题讨论】:

  • 呃,那不应该是insert into cash_transaction2017....吗? select count(*) from cash_transaction 在记录方面显示了什么 - 与您预期的相同或更少?
  • @RamRaider 脚本是从 cash_transaction 过滤数据并复制到表 cash_transaction2017
  • @RamRaider 我认为它在 MySQL 中是可选的
  • 真的吗?不知道!
  • @Strawberry 验证了大约 200 个数据丢失

标签: php mysql database phpmyadmin


【解决方案1】:

您可以尝试在您的 phpMyAdmin 目录中的 config.inc.php 中添加该行:

$cfg['MaxExactCount'] = 1000000*

*(确保$cfg['MaxExactCount']足够大)

这个问题可能只发生在 InnoDB 表中。希望这是有用的。

【讨论】:

  • 是的,你是对的,这些行实际上并没有“丢失”,只是在 phpmyadmin 中浏览时无法显示
猜你喜欢
  • 2018-10-31
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多