Maison >base de données >tutoriel mysql >Pourquoi est-ce que j'obtiens l'erreur MySQL 1062 : entrée en double pour une nouvelle clé primaire ?

Pourquoi est-ce que j'obtiens l'erreur MySQL 1062 : entrée en double pour une nouvelle clé primaire ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-27 13:53:09182parcourir

Why Am I Getting MySQL Error 1062: Duplicate Entry for a New Primary Key?

Erreur MySQL 1062 : entrée en double pour la nouvelle clé primaire

Lors de la modification d'une table MySQL pour changer sa clé primaire, il est possible de rencontrer le code d'erreur 1062 : "Entrée en double « 0 » pour la clé « PRIMARY ». Cela se produit lorsque la colonne de clé primaire nouvellement désignée contient un doublon. valeurs.

Cause :

Le problème se pose car les données de la table existante peuvent avoir des valeurs en double dans la colonne qui est convertie en clé primaire. La contrainte PRIMARY KEY garantit que toutes les valeurs de la colonne sont uniques. Lors de l'ajout de la contrainte PRIMARY KEY, MySQL vérifie les doublons et échoue s'ils existent.

Solution :

Pour éviter la perte de données et résoudre l'erreur, suivez ces étapes :

1. Ajouter un incrément automatique à la nouvelle colonne de clé primaire :

Assurez-vous que la nouvelle colonne de clé primaire possède la propriété AUTO_INCREMENT :

CREATE TABLE `momento_distribution`
(
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `momento_id` INT(11) NOT NULL,
    `momento_idmember` INT(11) NOT NULL,
    `created_at` DATETIME DEFAULT NULL,
    `updated_at` DATETIME DEFAULT NULL,
    `unread` TINYINT(1) DEFAULT '1',
    `accepted` VARCHAR(10) NOT NULL DEFAULT 'pending',
    `ext_member` VARCHAR(255) DEFAULT NULL,
    PRIMARY KEY (`id`, `momento_idmember`),
    KEY `momento_distribution_FI_2` (`momento_idmember`),
    KEY `accepted` (`accepted`, `ext_member`)
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1;

En attribuant la propriété AUTO_INCREMENT, MySQL générera automatiquement valeurs uniques pour la nouvelle colonne de clé primaire, évitant ainsi les doublons potentiels.

2. Modifier la colonne existante :

Si vous avez déjà créé la nouvelle colonne de clé primaire sans la propriété AUTO_INCREMENT, vous pouvez la modifier à l'aide de la requête suivante :

ALTER TABLE `momento_distribution`
CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`id`);

Cette requête modifiez la colonne id existante pour avoir la propriété AUTO_INCREMENT, supprimez l'ancienne contrainte de clé primaire et ajoutez une nouvelle contrainte de clé primaire sur la colonne id modifiée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn