2009-07-30 28 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ステータスの出力をチェックすると、

次のFOREIGN KEY ERRORレポートが表示されますが、挿入の正確な時刻ですが、削除された古い(元の)表の外部キーを参照し、この作成スクリプトには存在しません。テーブルweb2print/t_order_itemsの外部キー制約で

エラー: 参照してのものと一致しない テーブル内の 最初の列と列、またはデータ型が含まれますテーブル内のインデックスがありませんテーブル またはON ... SET NULL列の1つがNOT NULLと宣言されています。制約: 、 CONSTRAINT "FK_t_order_items_1" FOREIGN KEY( "のorderID")REFERENCES "t_orders"( "のorderID")DELETE CASCADE ON UPDATE CASCADE ON

テーブルには外部キーがありませんか?それらは削除されました。

次は

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; 

の作品しかし、なぜ私はそれを行う必要がありましたか?あなたが検証しようとしていたt_order_itemsとt_orders間の制約を持っていた任意のフィードバック

答えて

2

ため

感謝。まず、テーブルを削除する前にそれらを無効にする必要がありました。これはあなたとあなたのデータを守るために良いことです。外部キーは削除されている可能性がありますが、制約は削除されていません。

関連する問題