插入新记录时,MySQL跳过了一行

时间:2016-03-21 18:24:43

标签: mysql database mysqldump

问题是mysql在我们服务器上的CPU上运行很高,持续了大约15分钟。在那个时候,一些进入服务器的数据没有插入到数据库中,而是提交了事务。

重新启动mysql问题后解决了。

所以这意味着即使提交了事务,表中也没有新行。这方面的证据是自动递增的主键,应该如下所示:

100
101
102

但目前是这样的:

100
102

所以记录101丢失了,它被忽略了。

现在我需要找到该记录的某种日志(如果存在)。

我试过mysqldump log,但那里没有记录。记录101仍然缺失。

我需要找到一种方法来重新创建该事务并再次执行。

有没有人有类似的问题?

代码看起来基本上是这样的:

$db->autocommit(FALSE);

$sql = "INSERT INTO t (amount, datetime) VALUES ($amount, '$datetime')";
$db->query($sql);

$id = $db->insert_id;
$sql = "INSERT INTO tr (id, log) VALUES ($id, '$log')";
$db->query($sql);

$db->autocommit(TRUE);

1 个答案:

答案 0 :(得分:1)

在序列已经增加之后,事务很可能被中止。从数据库的角度来看,这不是问题:自动递增列不需要在那里按顺序包含所有ID。从代码/用户的角度来看,这也应该不是问题。如果您的代码需要连续的ID(可以说是出于审计目的),那么您必须自己实现一个系统。如果您不需要,那么只需再次运行该事务。然后,这将创建id 103(在您的情况下)。