Heim >Datenbank >MySQL-Tutorial >Wie erstelle ich automatisch inkrementierende Spalten in Oracle-Datenbanken?
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!