tabla puedo manejo espaƱol escribir errores error duplicada crear clave mysql mysql-workbench

manejo - mysql#1005 no puedo crear tabla



Error de MySQL 1022 al crear tabla (3)

El problema es que el nombre de una clave externa no puede ser igual a otra clave externa en todo el modelo.

Imagina esta situacion

Catálogo -> Proveedor

Producto -> Proveedor

Si el nombre de la clave foránea en la tabla Catálogo para el proveedor es "proveedor" y usted asignó el mismo nombre en la tabla de productos, los nombres de las claves foráneas "colisionarán".

Necesitas nombrarlos de manera diferente ..

Por ejemplo:

catalog_supplier product_supplier

MySQL Workbench creó el siguiente SQL para crear una tabla:

CREATE TABLE IF NOT EXISTS `mydb`.`errors_reports` ( `error_id` INT NOT NULL , `report_short` VARCHAR(15) NOT NULL , PRIMARY KEY (`error_id`, `report_short`) , INDEX `error_id_idx` (`error_id` ASC) , INDEX `report_short_idx` (`report_short` ASC) , CONSTRAINT `error_id` FOREIGN KEY (`error_id` ) REFERENCES `mydb`.`errors` (`error_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `report_short` FOREIGN KEY (`report_short` ) REFERENCES `mydb`.`reports` (`report_short` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB

que me parece bien, y hay un montón de otras tablas muy similares en mi base de datos que MySQL estaba perfectamente feliz de crear.

Pero este ...

ERROR 1022 (23000): Can''t write; duplicate key in table ''errors_reports''

Por mi vida no puedo ver ninguna clave duplicada aquí. Sólo hay una clave definida!

Estoy ejecutando MySQL 5.6 con una nueva instalación por defecto. No hay nada en el registro de errores.

Ideas?

Edición: a través de un proceso de eliminación (volviendo a la definición más simple posible de la tabla, y luego agregando bits de nuevo gradualmente) el problema parece ser este bit:

CONSTRAINT `error_id` FOREIGN KEY (`error_id` ) REFERENCES `mydb`.`errors` (`error_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION,

lo que es particularmente extraño ya que hay un código idéntico en varias otras definiciones de tabla y ¡están perfectamente bien!


Intente usar INSERT IGNORE lugar de INSERT donde INSERT IGNORE no insertará una nueva fila si se encuentra una clave principal duplicada. Esto debería ayudar a resolver el problema temporalmente, pero recomendaría truncar la tabla.


Parece que estás creando un índice en las columnas de clave externa. Al crear una clave externa en InnoDb, una se creará automáticamente.

Ver este hilo