¿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 tablamywines_copy
, pero la columnaid
en ambas tablas es una clave primaria y estás intentando insertar datos con los mismos valores deid
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 deid
en la tablamywines_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
ygrapes
de la tablamywines
para insertar en la tablamywines_copy
, y dado que no estás incluyendo la columnaid
, se generarán nuevos valores deid
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 columnaid
y estás intentando copiar todos los datos de esta tabla a la tablamywines_copy
. Sin embargo, la columnaid
está configurada comoAUTO_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 tablamywines_copy
, los valores de la columnaid
también se copian. Como la columnaid
es la clave primaria, MySQL intenta insertar estos valores duplicados en la tablamywines_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 tablamywines_copy
. Sin embargo, ten en cuenta que esto eliminará la restricción de unicidad de la columnaid
, 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 tablamywines
en la tablamywines_copy
, excepto los registros que tienen valores duplicados de la columnaid
.- 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 tablamywines_copy
sin errores.Respondida el Dec 21, 2020 a las 11:06 - por Gemini
Votos positivos: 0 | Votos negativos: 0