Autoincrement: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
(Die Seite wurde neu angelegt: Da es bei Orcale kein Auto Increment wie bei MySQL oder einen extra Datentyp wie bei PostgreSQL (SERIAL), muss hier ein Umweg über [[Seqenz (SQL) | Sequenz...)
 
K
 
(6 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
Autoincrement ist eine Hilfsfunktion die mittlerweile in die meisten [[Datenbanken]] einzug gehalten hat. Dabei kann je nach Datenbanksystem eine vorhandene Funktion der Datenbank benutzt werden oder es muss selbst etwas gebaut werden.
 +
 +
==MySQL==
 +
Unter [[MySQL]] gibt es das Attribut '''AUTO_INCREMENT''', dies kann für eine [[Primary Key]]-Spalte gesetzt werden.
 +
 +
==PostgreSQL==
 +
Bei [[PostgreSQL]] gibt es dafür die Datentypen [[SERIAL (PostgreSQL) | SERIAL]] und [[BIGSERIAL (PostgreSQL) | BIGSERIAL]]. Außerdem kann die gleiche Lösung wie bei [[Autoincrement#Oracle | Oracle]] genommen werden.
 +
 +
==Oracle==
 
Da es bei Orcale kein Auto Increment wie bei [[MySQL]] oder einen extra [[Datentyp]] wie bei [[PostgreSQL]] (SERIAL), muss hier ein Umweg über [[Seqenz (SQL) | Sequenzen]] gegangen werden.
 
Da es bei Orcale kein Auto Increment wie bei [[MySQL]] oder einen extra [[Datentyp]] wie bei [[PostgreSQL]] (SERIAL), muss hier ein Umweg über [[Seqenz (SQL) | Sequenzen]] gegangen werden.
  
 
Erst wird eine Sequenz erzeugt
 
Erst wird eine Sequenz erzeugt
CREATE SEQUENCE testtable_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE;
+
<syntaxhighlight lang="sql">CREATE SEQUENCE testtable_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE;</syntaxhighlight>
 
 
 
Anschließend wird diese mit einem Trigger auf die Tabelle gelegt. Dieser erzeugt bei jedem Einfügen den nächsten Zahlenwert.
 
Anschließend wird diese mit einem Trigger auf die Tabelle gelegt. Dieser erzeugt bei jedem Einfügen den nächsten Zahlenwert.
 +
<syntaxhighlight lang="sql">
 
  CREATE OR REPLACE TRIGGER testtable_inc_trigger  
 
  CREATE OR REPLACE TRIGGER testtable_inc_trigger  
BEFORE INSERT ON testtable FOR EACH ROW
+
  BEFORE INSERT ON testtable FOR EACH ROW
BEGIN
+
    BEGIN
SELECT testtable_seq.NEXTVAL INTO :NEW.id FROM DUAL;
+
    SELECT testtable_seq.NEXTVAL INTO :NEW.id FROM DUAL;
END;
+
    END;
 +
</syntaxhighlight>
 +
 
 +
==MSSQL==
 +
Unter [[MSSQL]] gibt es wie bei MySQL ein Attribut für Autoincrement, nur heißt es hier '''IDENTITY'''.
  
 
[[Kategorie:SQL]]
 
[[Kategorie:SQL]]
 +
[[Kategorie:MySQL]]
 +
[[Kategorie:PostgreSQL]]
 +
[[Kategorie:MSSQL]]
 
[[Kategorie:Oracle]]
 
[[Kategorie:Oracle]]

Aktuelle Version vom 30. August 2018, 08:00 Uhr

Autoincrement ist eine Hilfsfunktion die mittlerweile in die meisten Datenbanken einzug gehalten hat. Dabei kann je nach Datenbanksystem eine vorhandene Funktion der Datenbank benutzt werden oder es muss selbst etwas gebaut werden.

Inhaltsverzeichnis

MySQL

Unter MySQL gibt es das Attribut AUTO_INCREMENT, dies kann für eine Primary Key-Spalte gesetzt werden.

PostgreSQL

Bei PostgreSQL gibt es dafür die Datentypen SERIAL und BIGSERIAL. Außerdem kann die gleiche Lösung wie bei Oracle genommen werden.

Oracle

Da es bei Orcale kein Auto Increment wie bei MySQL oder einen extra Datentyp wie bei PostgreSQL (SERIAL), muss hier ein Umweg über Sequenzen gegangen werden.

Erst wird eine Sequenz erzeugt

CREATE SEQUENCE testtable_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE;

Anschließend wird diese mit einem Trigger auf die Tabelle gelegt. Dieser erzeugt bei jedem Einfügen den nächsten Zahlenwert.

 CREATE OR REPLACE TRIGGER testtable_inc_trigger 
   BEFORE INSERT ON testtable FOR EACH ROW
    BEGIN
     SELECT testtable_seq.NEXTVAL INTO :NEW.id FROM DUAL;
    END;

MSSQL

Unter MSSQL gibt es wie bei MySQL ein Attribut für Autoincrement, nur heißt es hier IDENTITY.