Numéro d'erreur MySQL 150 Créer échoue sur une clé étrangère non existante

StackOverflow https://stackoverflow.com/questions/1206850

  •  05-07-2019
  •  | 
  •  

Question

Je me débattais avec l'administrateur mysql pour tenter de modifier la clé primaire d'une table. Cela ne me le laisserait pas, alors je supprime quatre clés et renomme la table, ce qui ne pose pas de problème.

J'ai maintenant supprimé la table d'origine t_order_items mais je ne peux pas renommer t_order_items2 en t_order_items, il échoue avec une erreur de 150.

C’est pourquoi j’ai pensé que je rédigerais l’instruction create et que je sortirais de l’administrateur au cas où ce serait le problème. Le stament de création suivant échoue, mais uniquement si la table s'appelle t_order_items tout autre nom et qu'elle aboutit:

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 je vérifie la sortie de SHOW ENGINE INNODB STATUS;

Je reçois le rapport FOREIGN KEY ERROR suivant, qui correspond à l'heure correcte pour l'insertion, mais fait référence aux clés étrangères de l'ancienne table (d'origine) supprimée et n'existant pas dans ce script de création.

Erreur dans la contrainte de clé étrangère de la table web2print / t_order_items: il n'y a pas d'index dans la table qui contiendrait les colonnes comme les premières colonnes, ou les types de données dans le table ne correspond pas à celles de la table référencée ou l'une des colonnes ON ... SET NULL est déclarée NON NULL. Contrainte: ,   CONSTRAINT " FK_t_order_items_1 " FOREIGN KEY ("orderID") REFERENCES " t_orders " ("orderID") ON DELETE CASCADE SUR UPDATE CASCADE

Il n'y a pas de clé étrangère sur la table? ils ont été supprimés.

Les travaux suivants

 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;

Mais pourquoi devais-je le faire?

Merci pour vos commentaires

Était-ce utile?

La solution

Vous aviez des contraintes entre t_order_items et t_orders qui essayaient de valider. Vous deviez d'abord les désactiver avant de laisser tomber la table. C'est bien parce que cela vous protège, ainsi que vos données. Les clés étrangères ont peut-être été supprimées, mais pas les contraintes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top