Heim  >  Artikel  >  Datenbank  >  Beherrschen Sie last_insert_id() ganz einfach in der MySQL-Funktion

Beherrschen Sie last_insert_id() ganz einfach in der MySQL-Funktion

黄舟
黄舟Original
2017-01-18 11:17:191531Durchsuche

Relationales MySQL-Datenbankverwaltungssystem

MySQL ist ein kleines relationales Open-Source-Datenbankverwaltungssystem, das von der schwedischen Firma MySQL AB entwickelt wurde. MySQL wird häufig auf kleinen und mittelgroßen Websites im Internet verwendet. Aufgrund der geringen Größe, der hohen Geschwindigkeit, der niedrigen Gesamtbetriebskosten und insbesondere der Eigenschaften von Open Source wählen viele kleine und mittlere Websites MySQL als Website-Datenbank, um die Gesamtbetriebskosten der Website zu senken.


Ich glaube, jeder sollte wissen, dass die MySQL-Funktion viele Funktionen erreichen kann, die wir in diesem Artikel vorstellen. Der Artikel wird erweitert Ein Beispiel: Es sollte für das Verständnis und Lernen aller hilfreicher sein. Freunde in Not können unten vorbeischauen.

Vorwort

Kürzlich fragte mich ein Kollege, warum die von last_insert_id() erhaltenen Ergebnisse anders waren als erwartet, also habe ich diesen Parameter ernsthaft studiert. Im Folgenden finden Sie eine detaillierte Einführung in last_insert_id (), lasst uns gemeinsam lernen.

Geben Sie zunächst ein Beispiel

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)

Zweitens studieren Sie es

Es ist wirklich wichtig, die offizielle MySQL-Dokumentation zu konsultieren. . .

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

Originaldokument Wörter :

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.

Übersetzung:

last_insert_id() ohne Parameter gibt den ersten automatisch generierten Wert der letzten INSERT-Anweisung zurück, die für den Autoincrement-Spaltenwert ausgeführt wurde.

Originalwörter aus dem offiziellen Dokument:

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.

Übersetzung:

Wenn Sie mehrere Werte in einem einzigen INSERT einfügen Anweisung, dann gibt last_insert_id() den ersten automatisch generierten Wert der INSERT-Anweisung zurück.

Analysieren Sie es dann

Bitte lesen Sie die schwarze Schriftart in der obigen Übersetzung sorgfältig durch und beachten Sie die Einschränkungen von last_insert_id().

Warum schlägt last_insert_id() fehl, wenn der angegebene Wert eingefügt wird?

Im offiziellen Dokument heißt es eindeutig, dass es sich um einen automatisch generierten Wert handelt, nicht um einen von Ihnen angegebenen Wert. Er wird vom Autoincremnt-Zähler generiert und kann von last_insert_id() verfolgt werden. .

Warum wird beim Einfügen mehrerer Werte der erste eingefügte Wert angezeigt? Bedeutet Letzter nicht den letzten Wert? .

Im offiziellen Dokument heißt es eindeutig, dass es sich um den ersten Wert handelt, der automatisch von der neuesten INSERT-Anweisung generiert wird** Wow, wow, wow. .

Zusammenfassung

Beachten Sie die Einschränkungen von last_insert_id(). Der erste Wert, der von der letzten INSERT-Anweisung automatisch in der Spalte autpincreate generiert wurde. Der zusammenfassende Satz fühlt sich viel flüssiger an als der übersetzte Satz ==

Okay, das ist der gesamte Inhalt dieses Artikels. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn