Maison  >  Article  >  base de données  >  Maîtrisez facilement last_insert_id() dans la fonction MySQL

Maîtrisez facilement last_insert_id() dans la fonction MySQL

黄舟
黄舟original
2017-01-18 11:17:191516parcourir

Système de gestion de bases de données relationnelles MySQL

MySQL est un petit système de gestion de bases de données relationnelles open source développé par la société suédoise MySQL AB. MySQL est largement utilisé sur les sites Web de petite et moyenne taille sur Internet. En raison de sa petite taille, de sa vitesse rapide, de son faible coût total de possession et surtout des caractéristiques de l'open source, de nombreux sites Web de petite et moyenne taille choisissent MySQL comme base de données de site Web afin de réduire le coût total de possession d'un site Web.


Je pense que tout le monde devrait savoir que la fonction Mysql peut réaliser de nombreuses fonctions dont nous avons besoin. La fonction Mysql Last_insert_id() présentée dans cet article en fait partie. un exemple. En parlant de ça, cela devrait être plus utile pour la compréhension et l'apprentissage de chacun. Les amis dans le besoin peuvent venir jeter un œil ci-dessous.

Avant-propos

Récemment, un collègue m'a demandé pourquoi les résultats obtenus par last_insert_id() étaient différents de ceux attendus, j'ai donc étudié ce paramètre sérieusement. Ce qui suit est une introduction détaillée à last_insert_id. (), apprenons ensemble.

Tout d'abord, donnez un exemple

wing@3306>show create table tt;
+-------+-----------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                           |
+-------+-----------------------------------------------------------------------------------------------------------------------+
| tt | CREATE TABLE `tt` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
# 没有指定值的时候,last_insert_id()符合预期希望
wing@3306>insert into tt values();
Query OK, 1 row affected (0.00 sec)
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    1 |
+------------------+
1 row in set (0.00 sec)
wing@3306>insert into tt values();
Query OK, 1 row affected (0.00 sec)
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    2 |
+------------------+
1 row in set (0.00 sec)
# what?不是应该是5么,为什么是第一个插入的值3?last_insert_id开始有一点不符合预期了。。
wing@3306>insert into tt values(),(),();
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    3 |
+------------------+
1 row in set (0.00 sec)
wing@3306>insert into tt values(),(),();
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    6 |
+------------------+
1 row in set (0.00 sec)
# 纳尼?按照预期不是10么?为什么还是之前的6?last_insert_id()我不懂你啊。。
wing@3306>insert into tt values(10);
Query OK, 1 row affected (0.01 sec)
wing@3306>select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|    6 |
+------------------+
1 row in set (0.00 sec)

Deuxièmement, étudiez-le

Il est vraiment important de consulter la documentation officielle de MySQL. . .

Source officielle : http://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_last-insert-id

Document original Mots :

With no argument, LAST_INSERT_ID() returns a 64-bit value representing the first automatically generated value successfully 
inserted for an AUTO_INCREMENT column as a result of the most recently executed INSERT statement.

Traduction :

last_insert_id() sans paramètres renvoie la première valeur générée automatiquement de l'instruction INSERT la plus récente exécutée pour la valeur de la colonne d'auto-incrémentation.

Mots originaux du document officiel :

If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the 
first inserted row only. The reason for this is to make it possible to reproduce easily the same INSERT statement against some other server.

Traduction :

Si vous insérez plusieurs valeurs dans un seul INSERT instruction, alors last_insert_id() renvoie la première valeur générée automatiquement de l'instruction INSERT.

Ensuite, analysez-le

Veuillez lire attentivement la police noire dans la traduction ci-dessus et garder à l'esprit les contraintes de last_insert_id().

Pourquoi last_insert_id() échoue-t-il lorsque la valeur spécifiée est insérée ?

Le document officiel indique clairement qu'il s'agit d'une valeur générée automatiquement, et non d'une valeur que vous spécifiez. Elle est générée par le compteur à incrémentation automatique et peut être suivie par last_insert_id(). .

Pourquoi la première valeur insérée est-elle affichée lors de l'insertion de plusieurs valeurs ? La dernière valeur ne signifie-t-elle pas la dernière valeur ? .

Le document officiel indique clairement qu'il s'agit de la première valeur générée automatiquement par la dernière instruction INSERT** Wow wow wow. .

Résumé

Rappelez-vous les contraintes de last_insert_id(). Première valeur générée automatiquement sur la colonne autpincrement par l'instruction INSERT la plus récente. La phrase résumée semble beaucoup plus fluide que la phrase traduite ==

D'accord, ce qui précède représente l'intégralité du contenu de cet article. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php. cn). !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn