web-dev-qa-db-fra.com

Comment faire pour AUTO INCREMENT dans db2?

Je pensais que cela serait simple, mais je n'arrive pas à utiliser AUTO_INCREMENT dans ma base de données db2. J'ai fait des recherches et les gens semblent utiliser "Généré par défaut", mais cela ne fonctionne pas pour moi. 

Si cela vous aide, voici la table que je veux créer, le sid étant incrémenté automatiquement.

  create table student(
      sid integer NOT NULL <auto increment?>
      sname varchar(30),
      PRIMARY KEY (sid)
      );

Tous les indicateurs sont appréciés.

30
Matt

Vous recherchez s'appelle une colonne IDENTITY:

create table student (
   sid integer not null GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1)
  ,sname varchar(30)
  ,PRIMARY KEY (sid)
);

Une séquence est une autre option pour cela, mais vous devez déterminer laquelle est appropriée dans votre situation particulière. Lisez ceci pour plus d’informations comparaison de séquences à des colonnes d’identité .

50
Ian Bjorhovde

Vous devrez créer un champ auto-incrémenté avec l'objet séquence (cet objet génère une séquence numérique).

Utilisez la syntaxe CREATE SEQUENCE suivante:

  CREATE SEQUENCE seq_person
  MINVALUE 1
  START WITH 1
  INCREMENT BY 1
  CACHE 10

Le code ci-dessus crée un objet séquence appelé seq_person, qui commence par 1 et incrémente de 1. Il mettra également en cache jusqu'à 10 valeurs pour améliorer les performances. L'option cache spécifie le nombre de valeurs de séquence qui seront stockées en mémoire pour un accès plus rapide.

Pour insérer un nouvel enregistrement dans la table "Personnes", nous devrons utiliser la fonction nextval (cette fonction extrait la valeur suivante de la séquence seq_person):

  INSERT INTO Persons (P_Id,FirstName,LastName)
  VALUES (seq_person.nextval,'Lars','Monsen')

L'instruction SQL ci-dessus insérerait un nouvel enregistrement dans la table "Personnes". Le numéro suivant de la séquence seq_person serait attribué à la colonne "P_Id". La colonne "Prénom" serait définie sur "Lars" et la colonne "Nom" sur "Monsen".

6
Matt

Ajout de quelques paramètres optionnels pour la création de séquences "futures sûres".

CREATE SEQUENCE <NAME>
  START WITH 1
  INCREMENT BY 1
  NO MAXVALUE
  NO CYCLE
  CACHE 10;
1
noname

hi Si vous ne parvenez toujours pas à créer une colonne avec AUTO_INCREMENT lors de la création de la table. En tant que solution de contournement, créez d'abord une table qui est: 

create table student ( sid entier NON NUL sname varchar (30), PRIMARY KEY (sid) );

puis essayez explicitement de modifier la colonne bu en utilisant ce qui suit

alter table student modifier la colonne sid GENERATED BY DEFAULT AS IDENTITÉ

Ou 

alter table student modifier la colonne sid définie GENERATED BY DEFAULT AS IDENTITY (commencez par 100)

1
Mohd Arshil