Incrément automatique colonne de table
À l'aide de Postgres, je suis en train d'utiliser AUTO_INCREMENT
de numéro de ma clé primaire automatiquement en SQL. Cependant, il me donne une erreur.
CREATE TABLE Staff (
ID INTEGER NOT NULL AUTO_INCREMENT,
Name VARCHAR(40) NOT NULL,
PRIMARY KEY (ID)
);
L'erreur:
********** Error ********** ERROR: syntax error at or near "AUTO_INCREMENT" SQL state: 42601 Character: 63
Aucune idée pourquoi?
- La base de données utilisez-vous? "AUTO INCREMENT" n'existe que dans une poignée. Dans Oracle par exemple, vous devez créer un
SEQUENCE
. - Utilisation de Série: error-with-auto-increment-psql-putty
Vous devez vous connecter pour publier un commentaire.
Postgres 10 ou version ultérieure
serial
colonnes (voir ci-dessous) restent inchangés. Mais considérer uneIDENTITY
colonne. Postgres 10 met en œuvre cette norme SQL fonctionnalité.De base de la syntaxe et de l'info dans les manuel pour
CREATE TABLE
.Explication détaillée en ce l'entrée de blog de son auteur principal, Peter Eisentraut.
À ajouter un
IDENTITY
colonne à une pré-existante de la table (rempli avec des lignes ou pas):De le rendre également le PK dans le même temps (le tableau ne peut pas avoir un PK encore):
Il y avait un bug dans les premières versions, qui peuvent entraîner un message d'erreur comme:
Cela a été résolu avec Postgres 10.2. Détails:
Postgres 9.6 ou plus
Utiliser le
série
pseudo du type de données à la place:Il crée et attache de l'objet séquence automatiquement et définit la
DEFAULT
ànextval()
à partir de la séquence. Il ne vous faut.J'utilise aussi juste minuscules identifiants dans mon exemple. Rend votre vie avec Postgres plus facile.
Et de mieux utiliser les descriptifs des noms de colonne. "id" que le nom est un anti-modèle, utilisé par certains middle-ware, mais à peine descriptif. Similaire avec "nom".
Vous ne spécifiez pas quel SGBD que vous utilisez, cependant, dans SQL Server, vous pouvez utiliser cette syntaxe:
Dans la base de données SQL server, vous pouvez utiliser
Identity(1,1)
comme ceci:PostgreSQL: Si vous devez absolument avoir votre propre auto incrément de valeur:
Puis utiliser une séquence: