Pregunta

Estaba luchando con el administrador de mysql intentando cambiar la clave principal en una tabla. No me dejaría así que borro cuatro claves y renombro la tabla, no hay problema.

Ahora he eliminado la tabla original t_order_items pero no puedo cambiar el nombre de t_order_items2 a t_order_items, falla con un error 150.

Así que pensé que crearía la declaración de creación y saldría del administrador en caso de que fuera el problema. La siguiente creación falla pero solo si la tabla se llama t_order_items cualquier otro nombre y tuvo éxito:

DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Si compruebo la salida de SHOW ENGINE INNODB STATUS;

Obtengo el siguiente informe FOREIGN KEY ERROR, que es la hora correcta para la inserción, pero hace referencia a las claves externas de la tabla antigua (original) que se eliminó y no existe en este script de creación.

Error en la restricción de clave externa de la tabla web2print / t_order_items: no hay índice en la tabla que contendría las columnas como las primeras columnas, o los tipos de datos en el tabla no coincide con los de la tabla de referencia o una de las columnas ON ... SET NULL se declara NOT NULL. Restricción: ,   RESTRICCIÓN " FK_t_order_items_1 " LLAVE EXTRAÑA (" orderID ") REFERENCIAS " t_orders " (" orderID ") EN ELIMINAR CASCADE ON UPDATE CASCADE

¿No hay claves foráneas en la mesa? fueron eliminados.

Los siguientes trabajos

 SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;

¿Pero por qué tuve que hacer eso?

Gracias por cualquier comentario

¿Fue útil?

Solución

Tuviste restricciones entre t_order_items y t_orders que intentaban validar. Primero tenía que deshabilitarlos antes de abandonar la tabla. Esto es bueno porque te protege a ti y a tus datos. Es posible que se hayan eliminado las claves externas, pero no las restricciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top