【发布时间】: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_date与cash_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