如果新数据尚不存在,我想将其插入到表中。所以我正在使用:
$statement = $pdo->prepare("INSERT INTO orders (OrderId, OrderStatus, PaymentMethod) VALUES (?, ?, ?)");
$statement->execute(array($OrderID, $OrderStatus, $PaymentMethod));
效果非常好。但即使没有插入任何内容,_id(设置为自动递增)也会增加 1。我从 API 获取新数据。因此,如果我的数据库中已经存在“旧”订单,那么每次服务器运行脚本时,这些旧订单都会增加我的 _id - 但我只想增加新订单的 id 值。
最佳答案
如果在运行 INSERT
查询之前不显式检查该行是否已存在,则无法避免这种情况,即使使用 INSERT IGNORE
也是如此。原因是在发生任何其他事情之前,AUTO_INCRMENT
会发出一个新 ID,以保持数据的完整性。
当一些 dingbat 使用 MEDIUMINT
来保存后,在一个月内充斥着 INSERT IGNORE
的每小时 cron 咀嚼了 1600 万个 ID,我通过惨痛的方式了解到了这一点。 >每行一个完整字节。
如果您遇到同样的问题,您最好祈祷该 ID 列没有在外键约束中使用。
其次,如果您不使用 INSERT IGNORE
,那么您从发布的代码运行的每个普通 INSERT
查询也会生成错误,该错误将导致我尖叫道“这家伙根本不检查错误”,这太糟糕了。
关于php - MySQL 表 id 递增,尽管没有插入任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41111399/