MySQL AUTO_INCREMENT mit Beispielen
Was ist automatisches Inkrementieren?
Auto Increment ist eine Funktion, die mit numerischen Datentypen arbeitet. Sie generiert automatisch fortlaufende numerische Werte, wenn ein Datensatz fรผr ein als Auto Increment definiertes Feld in eine Tabelle eingefรผgt wird.
Wann wird die automatische Inkrementierung verwendet?
In der Lektion zur Datenbanknormalisierung haben wir untersucht, wie Daten mit minimaler Redundanz gespeichert werden kรถnnen, indem Daten in vielen kleinen Tabellen gespeichert werden, die mithilfe von Primรคr- und Fremdschlรผsseln miteinander verknรผpft sind.
Ein Primรคrschlรผssel muss eindeutig sein, da er eine Zeile in einer Datenbank eindeutig identifiziert. Aber wie kรถnnen wir sicherstellen, dass der Primรคrschlรผssel immer eindeutig ist? Eine mรถgliche Lรถsung wรคre, eine Formel zur Generierung des Primรคrschlรผssels zu verwenden, die vor dem Hinzufรผgen von Daten die Existenz des Schlรผssels in der Tabelle รผberprรผft. Dies kann gut funktionieren, aber wie Sie sehen, ist der Ansatz komplex und nicht narrensicher. Um diese Komplexitรคt zu vermeiden und sicherzustellen, dass der Primรคrschlรผssel immer eindeutig ist, kรถnnen wir Folgendes verwenden: MySQLDie Funktion โAuto-Inkrementโ zum Generieren von Primรคrschlรผsseln. Auto-Inkrement wird mit dem Datentyp INT verwendet. Der Datentyp INT unterstรผtzt sowohl vorzeichenbehaftete als auch vorzeichenlose Werte. Vorzeichenlose Datentypen kรถnnen nur positive Zahlen enthalten. Als bewรคhrte Methode wird empfohlen, die vorzeichenlose Einschrรคnkung fรผr den Auto-Inkrement-Primรคrschlรผssel zu definieren.
Syntax fรผr die automatische Inkrementierung
Schauen wir uns nun das Skript an, mit dem die Filmkategorientabelle erstellt wurde.
CREATE TABLE `categories` ( `category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`) );
Beachten Sie das โAUTO_INCREMENTโ im Feld โcategory_idโ. Dadurch wird die Kategorie-ID jedes Mal automatisch generiert, wenn eine neue Zeile in die Tabelle eingefรผgt wird. Beim Einfรผgen von Daten in die Tabelle wird es nicht mitgeliefert, MySQL erzeugt es.
Standardmรครig ist der Startwert fรผr AUTO_INCREMENT 1 und wird fรผr jeden neuen Datensatz um 1 erhรถht
Sehen wir uns den aktuellen Inhalt der Kategorientabelle an.
SELECT * FROM `categories`;
Ausfรผhren des obigen Skripts in MySQL Workbench gegen myflixdb liefert uns folgende Ergebnisse.
| category_id | category_name | remarks |
|---|---|---|
| 1 | Comedy | Movies with humour |
| 2 | Romantic | Love stories |
| 3 | Epic | Story acient movies |
| 4 | Horror | NULL |
| 5 | Science Fiction | NULL |
| 6 | Thriller | NULL |
| 7 | Action | NULL |
| 8 | Romantic Comedy | NULL |
Fรผgen wir nun eine neue Kategorie in die Kategorientabelle ein.
INSERT INTO `categories` (`category_name`) VALUES ('Cartoons');
Fรผhren Sie das obige Skript fรผr die myflixdb aus MySQL Werkbank gibt uns die folgenden unten gezeigten Ergebnisse.
| category_id | category_name | remarks |
|---|---|---|
| 1 | Comedy | Movies with humour |
| 2 | Romantic | Love stories |
| 3 | Epic | Story acient movies |
| 4 | Horror | NULL |
| 5 | Science Fiction | NULL |
| 6 | Thriller | NULL |
| 7 | Action | NULL |
| 8 | Romantic Comedy | NULL |
| 9 | Cartoons | NULL |
Beachten Sie, dass wir die Kategorie-ID nicht angegeben haben. MySQL Es wurde automatisch fรผr uns generiert, da die Kategorie-ID als automatische Inkrementierung definiert ist.
Wenn Sie die letzte Einfรผgungs-ID erhalten mรถchten, die von generiert wurde MySQL, kรถnnen Sie dazu die Funktion LAST_INSERT_ID verwenden. Das unten gezeigte Skript ruft die zuletzt generierte ID ab.
SELECT LAST_INSERT_ID();
Durch Ausfรผhren des obigen Skripts wird die letzte von der INSERT-Abfrage generierte automatische Inkrementnummer angezeigt. Die Ergebnisse sind unten aufgefรผhrt.
Zusammenfassung
- Wenn das Attribut โAutomatische Inkrementierungโ fรผr eine Spalte mit numerischen Datentypen angegeben wird, werden bei jedem Hinzufรผgen einer neuen Zeile zur Datenbank fortlaufend Zahlen generiert.
- Die automatische Inkrementierung wird รผblicherweise zum Generieren von Primรคrschlรผsseln verwendet.
- Der fรผr die automatische Inkrementierung definierte Datentyp sollte groร genug sein, um viele Datensรคtze aufzunehmen. Durch die Definition von TINYINT als Datentyp fรผr ein Feld mit automatischer Inkrementierung wird die Anzahl der Datensรคtze, die zur Tabelle hinzugefรผgt werden kรถnnen, auf lediglich 255 begrenzt, da darรผber hinausgehende Werte vom TINYINT-Datentyp nicht akzeptiert wรผrden.
- Es gilt als bewรคhrte Vorgehensweise, die vorzeichenlose Einschrรคnkung fรผr automatisch inkrementierte Primรคrschlรผssel anzugeben, um negative Zahlen zu vermeiden.
- Wenn eine Zeile aus einer Tabelle gelรถscht wird, wird ihre automatisch inkrementierte ID nicht wiederverwendet. MySQL generiert weiterhin sequenziell neue Zahlen.
- Standardmรครig ist der Startwert fรผr AUTO_INCREMENT 1 und wird fรผr jeden neuen Datensatz um 1 erhรถht
- Um die AUTO_INCREMENT-Sequenz mit einem anderen Wert beginnen zu lassen, verwenden Sie AUTO_INCREMENT = 10

