问题是 mysql 在我们服务器上的 CPU 上运行很高,并且持续了大约 15 分钟。当时,一些到达服务器的数据没有被插入到数据库中,而是提交了事务。
重启mysql后问题解决。
因此,这意味着即使事务已提交,表中也没有新行。证据是自动递增的主键,应该如下所示:
100
101
102
但目前是这样的:
100
102
因此记录 101 丢失并被跳过。
现在我需要找到该记录的某种日志(如果存在)。
我在mysqldump日志
中尝试过,但那里没有记录。记录 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);
最佳答案
事务很可能在序列已经增加后中止。从数据库的角度来看,这不是问题:自动递增列不需要按顺序包含所有 id。从代码/用户的角度来看,这也应该不是问题。如果您的代码需要连续的 ID(比如说出于审计目的),您将必须自己实现一个系统。如果您不需要,则只需再次运行事务即可。然后将创建 id 103(在您的情况下)。
关于database - MySQL在插入新记录时跳过了一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36138836/