2010-06-01 7 views
0

J'ai besoin de quelque chose de vraiment simple, que pour une raison quelconque je suis incapable d'accomplir jusqu'à ce point.Entier Clé de substitution?

J'ai également été incapable de Google la réponse de façon surprenante. J'ai besoin de numéroter les entrées dans différentes tables uniquement. Je suis conscient de AUTO INCREMENT dans MySQL et qu'il sera impliqué. Ma situation serait la suivante:

Si j'avais une table comme

Tableau EXEMPLE

 
    ID - INTEGER 
    FIRST_NAME - VARCHAR(45) 
    LAST_NAME - VARCHAR(45) 
    PHONE - VARCHAR(45) 
    CITY - VARCHAR(45) 
    STATE - VARCHAR(45) 
    ZIP - VARCHAR(45) 

Ce serait la configuration de la table où ID est un entier qui est auto-incrémentée à chaque fois une entrée est insérée dans la table. La chose dont j'ai besoin est que je ne veux pas avoir à rendre compte de ce champ lors de l'insertion de données dans la base de données. De ma compréhension que ce serait une clé de substitution, que je peux dire la base de données pour incrémenter automatiquement et je ne pas l'inclure dans l'INSERT DÉCLARATION

Ainsi, au lieu de:

 INSERT INTO EXAMPLE VALUES (2,'JOHN','SMITH',333-333-3333,'NORTH POLE'....

Je peux partir la première colonne d'identification et il suffit d'écrire quelque chose comme:

INSERT INTO EXAMPLE VALUES ('JOHN','SMITH'.....etc)

Avis Je ne voudrais pas définir la colonne ID ...

Je sais que cela est très comm sur la tâche à faire, mais pour une raison quelconque, je ne peux pas aller au fond des choses. J'utilise MySQL, juste pour clarifier.

Merci beaucoup

Répondre

1

Ce:

INSERT INTO EXAMPLE VALUES ('JOHN','SMITH'.....etc) 

... renverra une erreur MySQL # 1136, car le nombre de colonnes dans le tableau ne correspond pas au nombre de colonnes spécifié dans la clause VALUES. Donc, vous avez deux options:

  1. Utilisez NULL pour remplir la valeur de la colonne autoincrement. IE:

    INSERT INTO EXAMPLE VALUES (NULL, 'JOHN','SMITH'.....etc) 
    
  2. spécifier la liste des colonnes de la table que les valeurs sont prévues.IE:

    INSERT INTO EXAMPLE 
        (FIRST_NAME, LAST_NAME, PHONE, CITY, STATE, ZIP) 
    VALUES 
        ('JOHN','SMITH'.....etc) 
    
+0

pour l'un de ces exemples, si je spécifie la colonne ID à AUTO INCREMENT, le traitera-t-il correctement? – TheJediCowboy

+0

@CitadelCSAlum: Oui, si la colonne ID est définie sur AUTOINCREMENT - utilisez l'exemple fourni. –

+0

J'ai utilisé votre première option, elle correspondait le mieux à mes besoins, et je crois que cela aurait le moindre refactoring. Merci beaucoup! – TheJediCowboy

3

Faire IDauto_increment comme indiqué here. Vous n'avez pas besoin de fournir la valeur d'un champ auto_increment lorsque vous insérez une ligne, la base de données le fournira pour vous. Notez que dans ce cas, vous devez toujours utiliser la syntaxe insert de sorte que vous fournissiez les noms des champs, et que vous laissiez simplement de côté le champ ID.

1

Je ne sais pas à propos de mysql, mais dans SQL Server, vous devez spécifier les champs dans lesquels vous insériez dans l'insertion (ce que vous devriez faire dans tous les cas, de toute façon, comme meilleure pratique).

Avez-vous essayé

insert into Example(field1, field2) 
values ('John', 'Smith') 
+1

Lorsque vous omettez les colonnes après la table, vous comptez sur les positions ordinales des colonnes dans la table. Ce n'est jamais une bonne idée car votre code peut se casser de façon inattendue. –

+2

Ou pire, ne semble pas se casser (c'est-à-dire aucun message d'erreur) mais mettre les données dans les endroits usés. Cela peut durer un certain temps avant que quelqu'un ne le remarque et il est vraiment difficile de corriger les mauvaises données qui ont été affectées par quelque chose comme ça. – HLGEM

Questions connexes