2009-07-30 4 views
0

Je luttais avec l'administrateur mysql en essayant de changer la clé primaire sur une table. Il ne me laisserait pas ainsi je supprime des touches de quatreeign et renomme la table, grand aucun problème.MySQL Numéro d'erreur 150 Créer Échec sur une clé étrangère inexistante

J'ai maintenant supprimé la table d'origine t_order_items mais je ne peux pas renommer t_order_items2 en t_order_items, elle échoue avec une erreur 150. Je pensais que je créerais l'instruction de création et sortirais de l'administrateur juste au cas où c'était le problème. Ce qui suit créer stament échoue, mais que si la table est appelée t_order_items tout autre nom et succededs:

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 le résultat de SHOW STATUS MOTEUR INNODB; Je reçois le rapport FOREIGN KEY ERROR suivant qui est l'heure correcte pour l'insertion, mais référence les clés étrangères de l'ancienne table (originale) qui a été supprimée et n'existe pas sur 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 le tableau qui contiendrait les colonnes que les premières colonnes, ou les types de données dans le tableau ne correspondent pas à ceux de la référence La table ou l'une des colonnes ON ... SET NULL est déclarée NOT NULL. Contrainte: , CONTRAINTE "FK_t_order_items_1" FOREIGN KEY ("orderID") Références "t_orders" ("orderID") ON CASCADE ON UPDATE CASCADE SUPPRIMER

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 je dois le faire?

Merci pour tous les commentaires

Répondre

2

Vous avez eu 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.

Questions connexes