web-dev-qa-db-fra.com

Comment ajouter une clé unique à la table existante (avec des lignes non uniques)

Je veux ajouter une clé unique complexe à la table existante. La clé contient 4 champs (user_id, game_id, date, time).

Peut-être exister une autre solution sans rechercher toutes les données en double. (comme ajouter unique ignorer, etc.).

UPD J'ai cherché, comment supprimer les doublons de lignes mysql - je pense que c'est une bonne solution . Supprimer les doublons en utilisant uniquement une requête MySQL?

49
yAnTar

Vous pouvez faire comme yAnTar conseillé

ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY

OR

Vous pouvez ajouter une contrainte

ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time)

Mais je pense que pour ne pas perdre vos données existantes, vous pouvez ajouter une colonne d’identité puis créer une clé composite.

102
Igor Lozovsky

ALTER TABLE 0_value_addition_setup ADD UNIQUE (value_code)

13
radhason power

Je devais résoudre un problème similaire. J'ai hérité d'une grande table source de MS Access avec près de 15 000 enregistrements sans clé primaire, que je devais normaliser et rendre compatible avec CakePHP. Une convention de CakePHP est que chaque table a une clé primaire, que c'est la première colonne et qu'elle s'appelle 'id'. La déclaration simple suivante a fait l'affaire pour moi sous MySQL 5.5:

ALTER TABLE `database_name`.`table_name` 
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (`id`);

Cela a ajouté une nouvelle colonne 'id' de type entier devant les données existantes (mot clé "FIRST"). Le mot-clé AUTO_INCREMENT incrémente les identifiants en commençant par 1. Chaque jeu de données a maintenant un identifiant numérique unique. (Sans l'instruction AUTO_INCREMENT, toutes les lignes sont renseignées avec id = 0).

9
user3149374

Je fournis ma solution avec l'hypothèse sur votre logique d'entreprise. Dans ma conception, je vais autoriser la table à ne stocker qu’un seul enregistrement pour une combinaison jeu-utilisateur. Je vais donc ajouter une clé composite à la table.

PRIMARY KEY (`user_id`,`game_id`)
3
Slowcoder

Créez un identifiant d'auto-incrémentation ou un identifiant UNIQUE et ajoutez-le à la clé naturelle dont vous parlez avec les 4 champs. cela rendra chaque ligne de la table unique ...

2
Hituptony

Définir plusieurs clés uniques dans la table

ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);
0
prakash kumar