2009-07-30 80 views
0

我正在試圖更改表上的主鍵MySQL管理員摔跤。它不會讓我所以我刪除foureign鍵和重命名錶,很好沒有問題。MySQL錯誤編號150創建不存在的外鍵失敗

我現在已經刪除了原始表t_order_items,但我無法將t_order_items2重命名爲t_order_items,它會因150錯誤而失敗。

因此,我想我會創建創建聲明,並擺脫管理員,以防萬一它是問題。下面創建stament失敗,但只有在表被稱爲t_order_items別的名稱,它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; 

如果我檢查SHOW ENGINE INNODB STATUS的輸出;

我得到以下FOREIGN KEY ERROR報告,它是插入的正確時間,但引用已刪除的舊(原始)表的外鍵,並且不存在於此創建腳本中。

錯誤表web2print/t_order_items的外鍵約束: 沒有在表中沒有索引,其中將包括 在 表中的列作爲第一列,或數據類型不被引用的匹配者表 或其中一個ON ... SET NULL列被聲明爲NOT NULL。約束: , 約束 「FK_t_order_items_1」 外鍵( 「單編號」)參考 「t_orders」( 「單編號」)ON DELETE CASCADE ON UPDATE CASCADE

有在表上沒有外鍵?他們被刪除。

以下工作

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; 

可是我爲什麼這樣做呢?

感謝您的任何反饋

回答

2

您有同時試圖驗證t_order_items和t_orders之間的約束。您必須先禁用它們,然後再放下表格。這很好,因爲它可以保護你和你的數據。外鍵可能已被刪除,但約束不是。