dclp FAQ

FAQ der Newsgroups de.comp.lang.php.*

 
  • Increase font size
  • Default font size
  • Decrease font size

Datenbanken: MySQL

Wozu ist auto_increment nützlich? Wie erfahre ich den Wert des letzten Inkrements?

E-MailDruckenPDFLesezeichen anlegen: Du musst dich einloggen um ein Lesezeichen für diesen Beitrag anzulegen. Es wird deiner persönlichen Lesezeichenliste hinzugefügt.

Ganzzahlige 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.

Wozu ist auto_increment nützlich? Wie erfahre ich den Wert des letzten Inkrements?
http://www.php-faq.de/q-mysql-auto-increment.html
 

dclp FAQ


Login