Domanda

Stavo lottando con l'amministratore mysql cercando di cambiare la chiave primaria su un tavolo. Non mi permetterebbe quindi di eliminare le chiavi foureign e rinominare la tabella, ottimo problema.

Ora ho eliminato la tabella originale t_order_items ma non riesco a rinominare t_order_items2 in t_order_items, non riesce con un errore 150.

Quindi ho pensato che avrei creato la dichiarazione di creazione e uscito dall'amministratore nel caso fosse il problema. Il seguente stament di creazione ha esito negativo, ma solo se la tabella si chiama t_order_item qualsiasi altro nome e ha esito positivo:

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;

Se controllo l'output di SHOW ENGINE INNODB STATUS;

Ricevo il seguente report ERRORE CHIAVE ESTERO che è l'ora corretta per l'inserimento ma fa riferimento a chiavi esterne della vecchia tabella (originale) che è stata eliminata e non esistono in questo script di creazione.

Errore nel vincolo di chiave esterna della tabella web2print / t_order_items: non esiste un indice nella tabella che contenga le colonne come prime colonne o i tipi di dati in tabella non corrisponde a quelli nella tabella referenziata o una delle colonne ON ... SET NULL è dichiarata NOT NULL. vincolo: ,   VINCITORE " FK_t_order_items_1 " TASTO ESTERO (" orderID ") RIFERIMENTI " t_order " (" orderID ") IN CANCELLAZIONE DI CASCADE IN AGGIORNAMENTO CASCADE

Non ci sono chiavi esterne sul tavolo? sono stati eliminati.

Le seguenti opere

 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;

Ma perché ho dovuto farlo?

Grazie per qualsiasi feedback

È stato utile?

Soluzione

Avevi dei vincoli tra t_order_items e t_order che stavano cercando di convalidare. Devi prima disabilitarli prima di abbandonare la tabella. Questo è utile perché protegge te e i tuoi dati. Le chiavi esterne potrebbero essere state eliminate, ma i vincoli no.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top