虽然没有插入任何内容,但MySQL表ID增加

时间:2016-12-12 23:27:47

标签: php mysql

我想在我的表中插入新数据(如果它尚不存在)。所以我正在使用:

$statement = $pdo->prepare("INSERT INTO orders (OrderId, OrderStatus, PaymentMethod) VALUES (?, ?, ?)");
$statement->execute(array($OrderID, $OrderStatus, $PaymentMethod));

哪个效果很好。但即使没有插入任何内容,_id(设置为自动增量)也会增加1。我从API获取新数据。因此,如果我的数据库中已经存在“旧”订单,那么那些旧订单将在服务器运行脚本时增加我的_id - 但我只想增加新订单的id值。

1 个答案:

答案 0 :(得分:1)

在运行INSERT查询之前,如果没有明确检查行是否已存在,则无法避免这种情况,甚至不能使用INSERT IGNORE。原因是在发生任何其他事件之前,会从AUTO_INCREMENT发出新ID,以保持数据的完整性。

在一些dingbat使用INSERT IGNORE每行保存一整个字节后,一个小时的cron充斥着MEDIUMINT在一个月内咀嚼了1600万个ID时,我学到了很难的方法/ em>的

如果您遇到同样的问题,最好祈祷ID列不在外键约束中使用。

其次,如果您没有使用INSERT IGNORE,那么您从您发布的代码中运行的每个简单INSERT查询也会产生错误,这对我来说是尖叫& #34;这家伙根本没有检查错误#34;这是超级mondo坏。