Maison >base de données >tutoriel mysql >Comment créer des colonnes à incrémentation automatique dans les bases de données Oracle ?

Comment créer des colonnes à incrémentation automatique dans les bases de données Oracle ?

DDD
DDDoriginal
2025-01-23 23:21:53602parcourir

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

Colonne à incrémentation automatique dans la base de données Oracle

Dans Oracle Database, contrairement à d'autres systèmes de bases de données, il n'existait aucun concept d'incrémentation automatique des colonnes jusqu'à la version 11g. Cela peut créer des défis lors de la création de tables nécessitant des identifiants à incrémentation automatique. Heureusement, vous pouvez utiliser des séquences et des déclencheurs pour simuler ce comportement.

Simulation utilisant des séquences et des déclencheurs

Dans Oracle 11g et versions antérieures, vous pouvez créer des séquences et des déclencheurs pour simuler des colonnes à incrémentation automatique. Tout d'abord, définissez un tableau contenant une colonne numérique utilisée comme identifiant :

<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>

Ensuite, créez un déclencheur qui remplit la colonne ID avec la valeur suivante de la séquence lorsqu'un nouvel enregistrement est inséré :

<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>

Colonne Identité (Oracle 12c et versions ultérieures)

À partir d'Oracle 12c, les colonnes d'identité ont été introduites comme une véritable fonctionnalité d'incrémentation automatique. Vous pouvez définir une colonne d'identité dans un tableau comme suit :

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

Les colonnes d'identité peuvent également spécifier des valeurs de départ et incrémentielles pour empêcher les mises à jour manuelles :

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

Utiliser des séquences comme alternative aux valeurs par défaut

Oracle 12 propose également un moyen d'utiliser des séquences comme valeurs par défaut :

<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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn