我可以假设最高的自动增量值总是最新的条目吗?
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,例如 mysqli
、PDO
和 JDBC
return INSERT 操作完成时调用程序的此 ID。
LAST_INSERT_ID()
and the related API functions 在逐个连接的基础上工作。因此,如果多个连接正在插入行,每个连接将获得自己的 id 值。
我有以下代码从 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,例如 mysqli
、PDO
和 JDBC
return INSERT 操作完成时调用程序的此 ID。
LAST_INSERT_ID()
and the related API functions 在逐个连接的基础上工作。因此,如果多个连接正在插入行,每个连接将获得自己的 id 值。