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 |