我有以下代码从a表中获取最新条目。
$con = mysqli_connect($host,$username,$password,$database);
$result = $con->query("SELECT MAX(ID) FROM Samples");
$newest = $result->fetch_assoc();
田野 ID
是主键并具有自动增量。我没有代码来改变 ID
.
当我测试代码时,它总是成功地生成最新的条目,但是我不知道这是否是我可以依赖的行为。这会一直有效吗?如果没有,有没有更可靠的方法来获取最新条目?
2条答案
按热度按时间i2loujxw1#
mysql具有自动递增功能,您可以使用
然后您可以将条目添加到表中,而不必担心id,使用max可能会有问题,尤其是当数据可以在您正在构建的系统之外进行修改时,比如直接输入到表中。要插入记录,请将id保留为空。
我希望这有帮助,干杯!
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值。