2009-09-13 6 views
0

J'entre les enregistrements dans la base de données MySQL. Maintenant, je veux avoir un champ "Serial_Number" qui incrémente automatiquement chaque fois qu'un enregistrement est entré dans la base de données.MySQL - Comment créer un champ d'incrémentation automatique dans la base de données?

Je ne veux pas que ce champ "Serial_Number" soit la clé primaire de la base de données.

Comment créer ce champ (avec les attributs à définir). J'utilise "SQL YOG" pour accéder à MySQL. " Si vous connaissez le SQL YOG, dites-moi comment le faire via SQL YOG.

Répondre

3

La colonne AUTO_INCREMENT doit avoir une contrainte UNIQUE KEY associé.

Par exemple, cela fonctionne très bien:

CREATE TABLE AutoNotId 
(
    Id INTEGER PRIMARY KEY, 
    Auto INTEGER AUTO_INCREMENT, 
    UNIQUE (Auto) 
); 

Edit:

La déclaration ALTER ressemblerait un peu comme ceci:

ALTER TABLE AutoNotId 
    MODIFY COLUMN Auto INTEGER AUTO_INCREMENT, 
    ADD UNIQUE (Auto); 

Je recommande cependant l'utilisation de la syntaxe longue main pour spécifier le nom de la contrainte UNIQUE; Mais vous pouvez toujours vous référer à MySQL's Reference Manual pour les spécifications exactes.

+0

Merci Zxpro ... vous interrogez fonctionne très bien. Pouvez-vous me dire la commande alter pour modifier mon champ "sr_no" existant dans le tableau "orkut" pour que ce champ soit auto_increment et unique. –

-3

create table mytable ( ID INT IDENTITY (1,1) PRIMARY KEY,

SN INT IDENTITY (1,1)

)

+0

est-ce une déclaration mysql? –

+0

MySQL n'utilise pas IDENTITY. –

+0

Ce n'est pas une instruction MySQL. –

1

Je ne pense pas que vous pouvez avoir un champ incrémentation automatique:

CREATE TABLE `t` (`dd` int(11) NOT NULL) 
ALTER TABLE `t` CHANGE `dd` `dd` INT(11) NOT NULL AUTO_INCREMENT 

MySQL said: Documentation 
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key 
+0

Pouvez-vous me suggérer comment je peux le faire par n'importe quelle autre alternative. Je sauve les dossiers par l'intermédiaire de Java par le conducteur de JDBC. –

+0

personnes ont déjà souligné que vous pouvez utiliser un index unique. c'est correct car ce n'est pas une clé primaire. (la façon dont vous accédez à la base de données n'est pas pertinente pour votre problème). –

2

Dans MySQL, les tables ne peuvent contenir qu'un seul champ d'incrémentation automatique et doivent être indexées.

Il ne peut y avoir qu'une seule colonne AUTO_INCREMENT par table, elle doit être indexée et ne peut pas avoir une valeur DEFAULT.

Y a-t-il une raison pour laquelle vous ne voulez pas que ce soit la clé primaire?

Si vous voulez une valeur incrémentiel, vous pouvez truquer par les mises à jour en cours d'exécution après chaque insert:

SELECT MAX(serial) + 1 FROM myTable; 

UPDATE myTable SET serial = <that number> WHERE id = ... 
1

Vous ne pouvez pas le faire en MySQL. A partir de la doc:

Il ne peut y avoir qu'une seule colonne AUTO_INCREMENT par table, il doit être indexé, et il ne peut pas avoir une valeur par défaut. Une colonne AUTO_INCREMENT fonctionne correctement uniquement si elle contient uniquement des valeurs positives . L'insertion d'un nombre négatif est considéré comme l'insertion d'un très grand nombre positif .Ceci est fait pour éviter problèmes de précision lorsque le nombre « wrap » sur du positif au négatif et également veiller à ce que vous ne obtenir accidentellement une colonne AUTO_INCREMENT qui contient 0.

Pour les tables MyISAM et BDB, vous pouvez spécifier une colonne AUTO_INCREMENT secondaire dans une clé à plusieurs colonnes. Voir Section 3.6.9, «Utilisation de AUTO_INCREMENT».

Questions connexes