Instruction Insert m'a demandé d'insérer de colonne d'auto-incrémentation
J'utilise PostgreSQL, j'ai créé le tableau suivant:
CREATE TABLE "Task"
(
"taskID" serial NOT NULL,
"taskType" text NOT NULL,
"taskComment" text NOT NULL,
"taskDate" date NOT NULL,
CONSTRAINT "Task_pkey" PRIMARY KEY ("taskID")
)
J'ai mis l'id de la tâche que serial
-type de données à être incrémenté automatiquement. Maintenant, je suis confus comment utiliser le INSERT
, la déclaration de la première colonne de la table est censé pour incrémenter automatiquement mais INSERT
déclaration m'a demandé d'insérer une valeur par moi-même! Une Idée?
Voici mon instruction insert:
INSERT INTO "Task" VALUES ('HomeWork', 'No Comment', '3/3/2013');
- merci de nous montrer l'instruction insert ainsi
- Comment un programmeur de poser cette question sans montrer le
INSERT
déclaration? - Ajouté.
- Maintenant, c'est une bonne question. Alors que la plupart du temps inutiles dans ce cas, la version de PostgreSQL doit toujours être inclus.
Vous devez vous connecter pour publier un commentaire.
@mvp de la réponse couvre ce joli beaucoup. Sauf pour le cas où vous devez ajouter le
id
colonne dans la liste des colonnes pour une raison quelconque. Ensuite, vous pouvez utiliser le mot-cléDEFAULT
par défaut à la valeur par défaut définie par l'. Oui, beaucoup de "par défaut" dans cette phrase, mais il doit être correct. 🙂Vous feriez aussi de mieux utiliser le format de date ISO 8601 (
YYYY-MM-DD
), qui fonctionne indépendamment des paramètres régionaux. Votre régionalement format valide est sujette à la rupture.Cependant, si vous vous éloignez de la folie à l'utilisation cas mixte identifiants pour commencer, votre vie dans PostgreSQL sera beaucoup plus simple:
Ou mieux:
Vous devriez PAS liste cette clé auto-incrémentée dans
INSERT
déclaration, et il va fonctionner comme prévu:Si vous N'liste dans
INSERT
, vous devrez veiller à ce que la valeur fournie n'entre pas en conflit avec n'importe quelle des valeurs qui en général va être difficile à satisfaire, à moins d'utiliser systématiquement desnextval('some_sequence')
.