php - MySQL 表 id 递增,尽管没有插入任何内容

标签 php mysql

如果新数据尚不存在,我想将其插入到表中。所以我正在使用:

$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/

相关文章:

在 apache2 上安装 php-ffmpeg

MySQL Workbench::无法向现有表添加第二个外键

mysql - 异构数据库连接

javascript - 隐藏的 div 出现和背景元素消失/不可见

php - 返回记录数并忽略 MySQL/PHP 中的重复项

mysql - 用参数显示两个不同时间之间的所有时间

mysql - 使用unixtime进行sql查询

javascript - 滚动条和元素 - HTML/CSS

php - NTLM 身份验证 - 在 PHP 中获取 Windows 登录名、域和主机

php - MySQL中Select语句的默认上限是多少?