17.11. Wozu ist auto_increment nützlich? Wie erfahre ich den Wert des letzten Inkrements?Antwort von Daniel T. GorskiGanzzahlige Datenbankfelder in MySQL können mit dem Attribut auto_increment versehen werden. Wird über die betreffende Tabelle eine INSERT-Query ausgeführt, so wird automatisch der Wert des mit auto_increment gekennzeichneten Feldes um Eins erhöht (inkrementiert), ohne dass dieses in der INSERT-Query explizit angegeben werden muss bzw. darf. Dies ist bei "flachen" Tabellen ohne Relationen nützlich z.B. bei Gästebüchern. Mit dem MySQL-Monitor erzeugtes Beispiel:
mysql> CREATE DATABASE foo;
mysql> USE foo;
mysql> CREATE TABLE bar (
-> ID int(10) unsigned NOT NULL auto_increment,
-> INHALT varchar(32) NOT NULL,
-> PRIMARY KEY (ID)
-> );
mysql> DESCRIBE bar;
+--------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+----------------+
| ID | int(10) unsigned | | PRI | 0 | auto_increment |
| INHALT | varchar(32) | | | | |
+--------+------------------+------+-----+---------+----------------+
mysql> INSERT bar SET INHALT='erster Datensatz';
mysql> INSERT bar SET INHALT='zweiter Datensatz';
mysql> SELECT * FROM bar;
+----+-------------------+
| ID | INHALT |
+----+-------------------+
| 1 | erster Datensatz |
| 2 | zweiter Datensatz |
+----+-------------------+
2 rows in set (0.00 sec)
Wie man sehen kann, wird das Feld "ID" automatisch erhöht. Logischerweise darf nur ein Feld mit dem auto_increment Attribut versehen werden. Zusätzlich muss dieses Feld als Index definiert werden - z.B. als Primär-Schlüssel (PRIMARY KEY). Um den Wert des letzten Inkrements erfahren, stellt PHP die Funktion mysql_insert_id() zur Verfügung:
<?php
// Es wird davon ausgegangen, dass $host, $user und
// $passwort korrekt initialisiert sind
// Verbindung zu MySQL-Datenbank herstellen oder sterben.
$linkID = mysql_connect($host,$user,$password)
or die("Abbruch: Verbindung zu Host '$host' konnte"
." nicht hergestellt werden.");
// Benötigte Datenbank auswählen oder sterben.
@mysql_select_db("foo")
or die("Abbruch: Datenbank '$database' konnte nicht"
." selektiert werden.<br><br>MySQL sagt: ".mysql_error());
// INSERT ausführen
@mysql_query("INSERT bar SET INHALT='dritter Datensatz'");
// In unserem Beispiel ergibt das beim erstmaligen Aufruf "3"
// dann "4", dann "5" etc.
echo mysql_insert_id($linkID);
?>
Die Funktion mysql_insert_id() liefert nichts zurück, wenn vorher keine INSERT-Query ausgeführt wurde; sie liefert einen falschen Wert, wenn der Typ des auto-increment-Feldes als BIGINT definiert wird, für die meisten Anwendungen sollte aber der Typ INT UNSIGNED mehr als ausreichend sein. |
||
| 17.11. Wozu ist auto_increment nützlich? Wie erfahre ich den Wert des letzten Inkrements? http://www.php-faq.de/q/q-mysql-auto-increment.html |
||
| Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team | ||