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?
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.
ALTER TABLE 0_value_addition_setup
ADD UNIQUE (value_code
)
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).
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`)
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 ...
Définir plusieurs clés uniques dans la table
ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);