2013-03-10 5 views
0

Le problème

J'ai une table pour certaines données qui a une colonne ID de type entier (qui est aussi la clé primaire).Créer une nouvelle entrée de table avec une nouvelle id

Lorsqu'une nouvelle entrée de données est ajoutée à la table, elle doit obtenir un nouvel ID alors que l'ID n'est pas connue par l'application qui insère l'objet mais qu'elle doit être fournie par la base de données. Par exemple, les ID doivent être affectés comme 0, 1, 2, ...

Supposons que j'ai toutes les autres données pour la nouvelle entrée, comment est-ce que je ferais l'insertion? Normalement:

insert into T values(123, 'data'); 

Mais maintenant, je ne sais pas quoi mettre à la place de 123 - voulez-vous créer une sorte de variables NEXTID globale dans la base de données qui fournit les ID et requêtes/mettre à jour cette valeur à chaque fois avant d'insérer en T?

Les questions

  1. Comment gérer ce genre de problème? Une solution qui est la sauvegarde simultanée est préférable.
  2. Comment y parvenir avec Java/myBatis? J'ai une classe Java qui correspond à la structure de la table et un nouvel objet devrait être ajouté à la base de données, obtenant un nouvel identifiant automatiquement.

Mise à jour

Ce que je recherchais était auto-incrément.

  • Existe-t-il une méthode SQL standard (indépendante de la base de données) pour déclarer une colonne comme auto-incrémentée? J'utilise Apache Derby et GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) est suggéré here.
  • Comment l'insertion d'une table contenant des colonnes à incrémentation automatique ressemble-t-elle?
  • Quelle est la meilleure façon d'obtenir la valeur d'incrémentation automatique créée après une insertion lorsque l'accès simultané à la base de données est possible?

J'accepte une réponse qui comprend une explication et des instructions SQL pour la déclaration et l'insertion :)

+4

Vous devez déclarer la colonne comme auto-incrément et ne donner aucune valeur au champ "id". la valeur sera générée automatiquement. – BobTheBuilder

+0

Possibilité de dupliquer http: // stackoverflow.com/questions/9414826/sql-server-comment-ajouter-new-identity-column-et-populate-column-with-ids – DevelopmentIsMyPassion

+0

Aussi, il n'est jamais une mauvaise idée de spécifier explicitement les noms de colonnes que vous remplissez: 'INSERT INTO nom_table (nom_colonne1, nom_colonne2, ...) VALEURS (valeur1, valeur2, ...)'. Cela est particulièrement important dans certains produits SQL lorsque vous devez omettre la colonne d'auto-incrémentation. –

Répondre

0

Si vous utilisez SQL Server, ce qui rend la colonne de type d'identité résoudra quelque chose de but comme celui-ci .

ALTER TABLE [dbo].[T] ADD [Column1] INT identity (1, 1) 

Pour d'autres comme Oracle vous pouvez pour la séquence de base de données simple.

0

En MySQL, vous pouvez utiliser

ALTER TABLE table_name ADD id INT AUTO_INCREMENT; 

cette augmentation automatique de la colonne id, vous ne devez pas donner à insérer.

Questions connexes