Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-il conceptuellement correct de faire un SELECT MAX(id) etc. pour trouver la dernière ligne insérée ?

Cela semble subjectif, mais je dirais que non, ce n'est pas conceptuellement correct, car :

  • vous voulez la dernière ligne insérée
  • mais votre requête porte sur le maximum d'id valeur

Oui, il existe une relation entre l'ID max et l'insertion la plus récente, mais considérez ce qui suit :

  • que se passe-t-il si la dernière ligne insérée a été supprimée ?

Réponse sur MySQL :vous obtenez des résultats différents. Notez qu'il n'est même pas nécessaire qu'il y ait du multithreading ou plusieurs processus pour que cela échoue. C'est parce qu'il s'agit de deux choses différentes (ce qui, certes, peut souvent produire les mêmes résultats).

select max(id) from <tablename>

contre

select last_insert_id()

(Devinez laquelle a raison.)

@Dems a souligné que l'OP est ambigu. Je vais clarifier mon point principal :

Nous parlons de trois informations différentes :

  • id maximum valeur
  • id de la dernière ligne insérée, spécifique à une session
  • id de la dernière ligne insérée dans le tableau (quelle que soit la session)

La chose dangereuse est que parfois, interroger pour l'un donnera la bonne réponse pour un autre -- mais pas toujours .