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

mqxuamgl  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(880)

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

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

田野 ID 是主键并具有自动增量。我没有代码来改变 ID .
当我测试代码时,它总是成功地生成最新的条目,但是我不知道这是否是我可以依赖的行为。这会一直有效吗?如果没有,有没有更可靠的方法来获取最新条目?

i2loujxw

i2loujxw1#

mysql具有自动递增功能,您可以使用

ALTER TABLE document MODIFY COLUMN ID INT auto_increment

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

ogq8wdun

ogq8wdun2#

威尔 SELECT MAX(ID) FROM ... 总是工作?
不,不会的。如果有多个程序副本连接到数据库,并且一个程序按您的建议执行,然后另一个程序执行插入,则第一个程序的 MAX(ID) 价值将过时。这是比赛条件。这些问题很难检测和调试,因为只有在系统负载较重时才会出现。
如果你只关心 MAX(ID) 你会没事的。但你不能用这个 MAX(ID) 值作为下一次插入的值,除非您永远不会有多个程序示例插入数据。依靠那种“从不”是不明智的。
如果没有,有没有更可靠的方法来获取最新条目?
执行插入操作后,可以立即执行 SELECT LAST_INSERT_ID() 检索刚刚使用的自动递增id。各种API,比如 mysqli , PDO ,和 JDBC 插入操作完成后,将此id返回给调用程序。 LAST_INSERT_ID() 相关的api函数以连接为基础工作。因此,如果多个连接正在插入行,则每个连接将获得自己的id值。

相关问题