¿Por qué obtengo error "1062 Entrada duplicada" al copiar tablas?

Esto me vuelve loco... He probado muchas soluciones diferentes, googled, e intenté encontrar respuestas que realmente explican por qué recibo el error "1062 Duplicate Error" en MySQL cuando intento copiar una tabla a otra.

Mi tabla que trato de copiar tiene los siguientes contenidos:

Table: "mywines"
+----+--------------------------------+------------------+------------+
| id | name                           | winery           | grapes     |
+----+--------------------------------+------------------+------------+
| 1  | Champagne Tentation            | A. Bergère       |            |
| 2  | Champagne Les Clos             | A. Bergère       | Menunier   |
| 4  | Champagne Cuvée Selection      | Collard-Picard   |            |
| 8  | Les Vaupulans Chablis 1er Cru  | Vrignaud         | Chardonnay |
| 9  | Les Cotes de Fontenay 1er Cru  | Vrignaud         | Chardonnay |
| 10 | Domaine Sainte Claire          | Jean-Marc Brocard| Chardonnay |
+----+--------------------------------+------------------+------------+

La tabla está construida y diseñada según el siguiente script SQL:

CREATE TABLE `mywines` (
  `id` int(11) NOT NULL,
  `name` varchar(200) NOT NULL DEFAULT '',
  `winery` varchar(100) DEFAULT '',
  `grapes` varchar(200) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `mywines` (`id`, `name`, `winery`, `grapes`) VALUES
(1, 'Champagne Tentation', 'A. Bergère', ''),
(2, 'Champagne Les Clos', 'A. Bergère', 'Menunier'),
(4, 'Champagne Cuvée Selection', 'Collard-Picard', ''),
(8, 'Les Vaupulans Chablis 1er Cru', 'Vrignaud', 'Chardonnay'),
(9, 'Les Cotes de Fontenay 1er Cru', 'Vrignaud', 'Chardonnay'),
(10, 'Domaine Sainte Claire', 'Jean-Marc Brocard', 'Chardonnay');

ALTER TABLE `mywines`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `mywines`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;
COMMIT;

Ahora... Trato de crear una copia de esta tabla. Dirijo tres SQL-commands:

DROP TABLE IF EXISTS `mywines_copy`;
CREATE TABLE `mywines_copy`  LIKE `mywines`; 
INSERT `mywines_copy` SELECT * FROM `mywines`;

Primero, suelte las copias existentes. Segundo, crear el mywines_copy con la misma estructura mywines. Por último, copie datos a la nueva tabla. Aquí se produce el siguiente error:

Error Code: 1062. Duplicate entry '1' for key 'PRIMARY'

No entiendo este error. No se copian datos en absoluto a la nueva tabla. ¿Cómo puede haber un duplicado?? Realmente he tratado de entender preguntas similares. He experimentado con diferentes tablas, columnas, configuraciones... pero aún no lo entiendo...

Pregunta hecha hace 3 años, 4 meses, 25 días - Por codeartisan


2 Respuestas:

  • El error "1062 Duplicate entry" se produce porque estás intentando copiar los datos de la tabla mywines a la tabla mywines_copy, pero la columna id en ambas tablas es una clave primaria y estás intentando insertar datos con los mismos valores de id en ambas tablas.

    Para solucionar este problema, puedes realizar la copia de la tabla sin copiar la columna id, para que así se generen nuevos valores de id en la tabla mywines_copy. Aquí te muestro cómo puedes hacerlo:

    sql DROP TABLE IF EXISTS `mywines_copy`; CREATE TABLE `mywines_copy` LIKE `mywines`; INSERT INTO `mywines_copy` (`name`, `winery`, `grapes`) SELECT `name`, `winery`, `grapes` FROM `mywines`;

    Con esta modificación, estás seleccionando solo las columnas name, winery y grapes de la tabla mywines para insertar en la tabla mywines_copy, y dado que no estás incluyendo la columna id, se generarán nuevos valores de id en la tabla de destino evitando así el error de duplicados.

    ¡Intenta ejecutar este script y deberías poder copiar los datos de la tabla satisfactoriamente!

    Respondida el Dec 21, 2020 a las 10:53 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error "Entrada duplicada" (error 1062) en MySQL se produce cuando intentas insertar un registro en una tabla que tiene una clave primaria o única y el valor de esa clave ya existe en la tabla.

    En tu caso, la tabla mywines tiene una clave primaria en la columna id y estás intentando copiar todos los datos de esta tabla a la tabla mywines_copy. Sin embargo, la columna id está configurada como AUTO_INCREMENT, lo que significa que MySQL asigna automáticamente un valor único a esta columna para cada nuevo registro insertado.

    Cuando copias los datos de la tabla mywines a la tabla mywines_copy, los valores de la columna id también se copian. Como la columna id es la clave primaria, MySQL intenta insertar estos valores duplicados en la tabla mywines_copy, lo que provoca el error "Entrada duplicada".

    Para resolver este problema, puedes utilizar una de las siguientes opciones:

    • Eliminar la restricción de clave primaria en la columna `id` de la tabla `mywines_copy`:

    sql ALTER TABLE `mywines_copy` DROP PRIMARY KEY;

    Esto permitirá que los valores duplicados de la columna id se inserten en la tabla mywines_copy. Sin embargo, ten en cuenta que esto eliminará la restricción de unicidad de la columna id, lo que podría provocar problemas de integridad de datos en el futuro.

    • Especificar la opción `IGNORE` en la instrucción `INSERT`:

    sql INSERT IGNORE INTO `mywines_copy` SELECT <strong> FROM `mywines`;

    La opción IGNORE indica a MySQL que ignore los errores de entrada duplicada y continúe insertando los registros restantes. Esto insertará todos los registros de la tabla mywines en la tabla mywines_copy, excepto los registros que tienen valores duplicados de la columna id.

    • Generar nuevos valores de ID para la tabla `mywines_copy`:*

    sql ALTER TABLE `mywines_copy` AUTO_INCREMENT = 11; INSERT INTO `mywines_copy` (`name`, `winery`, `grapes`) SELECT `name`, `winery`, `grapes` FROM `mywines`;

    Esto generará nuevos valores de ID para los registros insertados en la tabla mywines_copy, lo que evitará errores de entrada duplicada.

    Una vez que hayas resuelto el problema de la clave primaria, deberías poder copiar los datos de la tabla mywines a la tabla mywines_copy sin errores.

    Respondida el Dec 21, 2020 a las 11:06 - por Gemini

    Votos positivos: 0 | Votos negativos: 0