我可以假设最高的自动增量值始终是最新的条目吗?

时间:2018-05-14 19:31:14

标签: mysql sql auto-increment

我有以下代码从表中获取最新条目。

$con = mysqli_connect($host,$username,$password,$database);
$result = $con->query("SELECT MAX(ID) FROM Samples");
$newest = $result->fetch_assoc();

字段ID是主键,并且具有auto_increment。我没有代码来改变ID的价值。

当我测试代码时,代码总是成功地产生最新的条目,但我不知道这是否是我可以依赖的行为。这会一直有效吗?如果没有,是否有更可靠的方式来获得最新的条目?

2 个答案:

答案 0 :(得分:4)

  

SELECT MAX(ID) FROM ...会一直有效吗?

不,它不会。如果您的程序有多个副本连接到您的数据库,并且一个程序执行了您的建议,而另一个程序则执行插入,第一个程序是MAX(ID)值将变得陈旧。这是竞争条件。这些很难检测和调试,因为它们不会在系统负载很重的情况下出现。

如果您关心的只是MAX(ID)的快照,那么您就可以了。但您不能将此MAX(ID)值用作下一次插入的值,除非 never 将有多个插入数据的程序实例。依靠那种 never。

是不明智的
  

如果没有,是否有更可靠的方式获得最新条目?

执行INSERT操作后,您可以立即执行SELECT LAST_INSERT_ID()来检索刚刚使用的自动增量ID。当INSERT操作完成时,各种API(如mysqliPDOJDBC会将此ID返回给调用程序。

LAST_INSERT_ID() and the related API functions以逐个连接的方式工作。因此,如果多个连接正在插入行,则每个连接都将获得自己的id值。

答案 1 :(得分:-1)

MySQL具有自动增量功能,您可以使用

将列设置为自动增量
ALTER TABLE document MODIFY COLUMN ID INT auto_increment

然后您可以向表中添加条目,而不必担心Id,使用max可能会有问题,尤其是当数据可以在您正在构建的系统之外进行修改时,例如直接输入到表中。要插入记录,请将Id保留为空。

我希望这会有所帮助,欢呼!