Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich automatisch inkrementierende Spalten in Oracle-Datenbanken?

Wie erstelle ich automatisch inkrementierende Spalten in Oracle-Datenbanken?

DDD
DDDOriginal
2025-01-23 23:21:53582Durchsuche

How Do I Create Auto-Incrementing Columns in Oracle Databases?

Spalte mit automatischer Inkrementierung in der Oracle-Datenbank

Im Gegensatz zu anderen Datenbanksystemen gab es in Oracle Database bis Version 11g kein Konzept zur automatischen Inkrementierung von Spalten. Dies kann beim Erstellen von Tabellen, die automatisch inkrementierende Bezeichner erfordern, zu Herausforderungen führen. Glücklicherweise können Sie Sequenzen und Trigger verwenden, um dieses Verhalten zu simulieren.

Simulation mit Sequenzen und Triggern

In Oracle 11g und früher können Sie Sequenzen und Trigger erstellen, um automatisch inkrementierende Spalten zu simulieren. Definieren Sie zunächst eine Tabelle mit einer numerischen Spalte, die als Bezeichner verwendet wird:

<code class="language-sql">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;</code>

Als nächstes erstellen Sie einen Trigger, der die ID-Spalte mit dem nächsten Wert der Sequenz füllt, wenn ein neuer Datensatz eingefügt wird:

<code class="language-sql">CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;</code>

Identitätsspalte (Oracle 12c und höher)

Ab Oracle 12c wurden Identitätsspalten als echte Funktion zur automatischen Inkrementierung eingeführt. Sie können eine Identitätsspalte in einer Tabelle wie folgt definieren:

<code class="language-sql">CREATE TABLE t1 (
  c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
  c2 VARCHAR2(10)
);</code>

Identitätsspalten können auch Start- und Inkrementalwerte angeben, um manuelle Aktualisierungen zu verhindern:

<code class="language-sql">CREATE TABLE t1 (
  c1 NUMBER GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
  c2 VARCHAR2(10)
);</code>

Verwenden Sie Sequenzen als Alternative zu Standardwerten

Oracle 12 bietet auch eine Möglichkeit, Sequenzen als Standardwerte zu verwenden:

<code class="language-sql">CREATE SEQUENCE dept_seq START WITH 1;

CREATE TABLE departments (
  ID           NUMBER(10)    DEFAULT dept_seq.NEXTVAL NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL
);</code>

Das obige ist der detaillierte Inhalt vonWie erstelle ich automatisch inkrementierende Spalten in Oracle-Datenbanken?. 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