it-swarm.com.de

Wie AUTO INCREMENT in db2?

Ich dachte, das wäre einfach, aber ich kann AUTO_INCREMENT anscheinend nicht in meiner Datenbank db2 verwenden. Ich habe ein wenig gesucht und die Leute scheinen "Generated by Default" zu verwenden, aber das funktioniert nicht für mich. 

Wenn es hilft, hier ist die Tabelle, die ich erstellen möchte, wobei die Sid automatisch inkrementiert wird.

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

Alle Hinweise werden geschätzt.

30
Matt

Sie suchen eine IDENTITY-Spalte:

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

Eine Sequenz ist eine weitere Option, um dies zu tun, aber Sie müssen bestimmen, welche die richtige ist für Ihre spezielle Situation. Lesen Sie dies für weitere Informationen Vergleichen von Sequenzen mit Identitätsspalten .

50
Ian Bjorhovde

Sie müssen ein Auto-Increment-Feld mit dem Sequenzobjekt erstellen (dieses Objekt generiert eine Nummernsequenz).

Verwenden Sie die folgende CREATE SEQUENCE-Syntax:

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

Der obige Code erstellt ein Sequenzobjekt namens seq_person, das mit 1 beginnt und um 1 erhöht wird. Es werden auch bis zu 10 Werte für die Leistung zwischengespeichert. Die Cache-Option gibt an, wie viele Sequenzwerte für einen schnelleren Zugriff im Speicher abgelegt werden.

Um einen neuen Datensatz in die Tabelle "Persons" einzufügen, müssen Sie die nextval-Funktion verwenden (diese Funktion ruft den nächsten Wert aus der seq_person-Sequenz ab):

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

Die SQL-Anweisung oben würde einen neuen Datensatz in die Tabelle "Persons" einfügen. Der Spalte "P_Id" würde die nächste Nummer aus der seq_person-Sequenz zugewiesen. Die "FirstName" -Spalte würde auf "Lars" und die "LastName" -Spalte auf "Monsen" gesetzt werden.

6
Matt

Einige optionale Parameter zum Erstellen von "zukunftssicheren" Sequenzen hinzugefügt.

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

hi Wenn Sie beim Erstellen einer Tabelle immer noch keine Spalte als AUTO_INCREMENT erstellen können. Um dieses Problem zu umgehen, erstellen Sie zunächst eine Tabelle: 

tabellenschüler erstellen ( sid Ganzzahl NOT NULL sname varchar (30), PRIMARY KEY (sid) );

und versuchen Sie dann explizit, die Spalte bu folgendermaßen zu ändern

alter table student alter Spalte sid set GENERATED BY DEFAULT AS IDENTITÄT

Oder 

alter table student alter Spalte sid set GENERATED BY DEFAULT AS IDENTITY (mit 100 beginnen)

1
Mohd Arshil