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

Can I assume the highest auto increment value is always the newest entry?

我有以下代码从 table.

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

字段ID为主键,有auto_increment。我没有更改 ID.

值的代码

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

MySQL有自增功能,可以使用

设置列自增
ALTER TABLE document MODIFY COLUMN ID INT auto_increment

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

希望对您有所帮助,干杯!

Will SELECT MAX(ID) FROM ... always work?

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

如果您只关心 MAX(ID) 的快照,就可以了。但是你不能使用这个MAX(ID)值作为下一次插入的值,除非你never会有多个程序实例插入数据。 永远不要依赖那种东西是不明智的。

If not, is there a more reliable way to get the newest entry?

在执行 INSERT 操作后,您可以立即执行 SELECT LAST_INSERT_ID() 来检索刚刚使用的自动递增 ID。各种 API,例如 mysqliPDOJDBC return INSERT 操作完成时调用程序的此 ID。

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