2009-07-20 5 views
21

À l'heure actuelle, j'ai une table dont la clé primaire est un champ auto_increment. Cependant, j'ai besoin de définir la clé primaire comme username, date (pour s'assurer qu'il ne peut pas y avoir un nom d'utilisateur en double avec une date).J'ai besoin d'auto_increment un champ dans MySQL qui n'est pas la clé primaire

J'ai besoin du champ auto_increment, cependant, pour apporter des modifications aux informations de ligne (ajout et suppression).

Que fait-on normalement de cette situation?

Merci!

Répondre

16

Il suffit de définir un index unique sur composite de (nom d'utilisateur, date).

ALTER TABLE `table` ADD UNIQUE INDEX `name` (`username`, `date`); 

Vous pouvez essayer de

ALTER TABLE `table` DROP PRIMARY KEY, ADD PRIMARY KEY(`username`,`date`); 

et je pense que dans ce dernier cas, vous avez besoin de ces colonnes à déclarer NOT NULL.

+0

qui le fait, merci! – littleK

+0

@littleK J'ai deux champs je veux définir un comme clé primaire et un autre comme un incrément automatique est-il possible? –

1

Changer votre clé primaire en cours d'être une clé unique à la place:

ALTER TABLE table DROP PRIMARY KEY, ADD UNIQUE KEY(username,date); 

Le auto_increment fonctionnera normalement après que, sans aucun problème. Vous devez également placer une clé unique sur le terrain auto_increment ainsi, à utiliser pour votre traitement de la ligne:

ALTER TABLE table ADD UNIQUE KEY(id); 
+0

J'ai essayé de le faire de cette façon, mais je recevais toujours l'erreur: # 1075 - Définition de table incorrecte; il ne peut y avoir qu'une seule colonne automatique et elle doit être définie comme une clé – littleK

1

Utilisez quelque chose comme:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT, 
    user VARCHAR(32) NOT NULL, 
    thedate DATE NOT NULL, 
    UNIQUE(user,thedate) 
); 

Si vous avez déjà la table, et que vous voulez juste ajouter une contrainte unique sur utilisateur + theDate, exécutez

ALTER TABLE users ADD UNIQUE KEY user_date_idx (user, thedate); 
1

Je sais que c'est vieille question, voici comment je résolu le problème -

ALTER TABLE `student_info` ADD `sn` INT(3) UNIQUE NOT NULL AUTO_INCREMENT FIRST   
+0

Solution utile, merci! –

Questions connexes