Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich automatisch inkrementierende Spalten in Oracle 11g und höher?

Wie erstelle ich automatisch inkrementierende Spalten in Oracle 11g und höher?

Linda Hamilton
Linda HamiltonOriginal
2025-01-23 23:31:20289Durchsuche

How to Create Auto-Incrementing Columns in Oracle 11g and Later?

Erstellen von AUTO_INCREMENT-ähnlichen Spalten in Oracle 11g

In Oracle-Versionen bis 11g ist der Spaltentyp AUTO_INCREMENT nicht nativ verfügbar. Es gibt jedoch alternative Mechanismen, um eine ähnliche Funktionalität zu erreichen.

Verwendung von Sequenzen und Triggern

Der häufigste Ansatz in Oracle 11g ist die Verwendung einer Kombination aus einer Sequenz und einem Auslöser:

Tabelle Definition:

CREATE TABLE departments (
  ID           NUMBER(10)    NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL
);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID)
);

CREATE SEQUENCE dept_seq START WITH 1;

Trigger-Definition:

CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

Dieser Trigger weist den neu eingefügten Zeilen einen eindeutigen, inkrementellen Wert zu und ahmt das Verhalten von nach Spalten automatisch inkrementieren.

IDENTITY-Spalten (Oracle 12c )

In Oracle 12c und höher wurde der Spaltentyp IDENTITY eingeführt, der eine echte Funktion zur automatischen Inkrementierung bereitstellt:

Tabellendefinition:

create table t1 (
    c1 NUMBER GENERATED by default on null as IDENTITY,
    c2 VARCHAR2(10)
);

Diese Definition erstellt eine Spalte „c1“, die automatisch für jede neue Zeile erhöht wird, die in die eingefügt wird Tabelle.

Alternativ können Sie Start- und Inkrementwerte angeben:

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
);

Sequenzen als Standardwerte verwenden (Oracle 12)

Eine weitere Option in Oracle 12 und höher besteht darin, eine Sequenz als Standardwert für a zu verwenden Spalte:

CREATE SEQUENCE dept_seq START WITH 1;

CREATE TABLE departments (
  ID           NUMBER(10)    DEFAULT dept_seq.nextval NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL
);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID)
);

Dieser Ansatz weist inkrementelle Werte mithilfe einer Sequenz zu, aber der eigentliche Inkrementierungsvorgang wird von der Datenbank verwaltet.

Das obige ist der detaillierte Inhalt vonWie erstelle ich automatisch inkrementierende Spalten in Oracle 11g und höher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn