1.問題について説明します。
ここで私は2つのテーブル(customers_infoと注文)を作成しました
表I:customers_info
表customers_info CREATE ( c_num INTを(11)PRIMARY KEY、NOT NULL UNIQUE AUTO_INCREMENT、 c_name VARCHAR(50)、 c_contact VARCHAR(50)、 c_city VARCHAR(50)、 c_birth DATETIME NOT NULL )。
要求C_IDデータ型VARCHAR(50)の主題が、彼はテーブルc_numをcustomers_infoするために関連する外部キー制約を設定するために私に尋ねたときに、この時点で、我々は新しい表II受注しています。
表オーダーを作成 ( o_num INT(11)PRIMARY KEYはNOT NULL UNIQUE AUTO_INCREMENT、 o_date DATE、 VARCHAR(50)、C_ID CONSTRAINT fk_c_num FOREIGN KEY(C_ID)c_num(customers_info参照を) )。
この時間を実行し、エラーが発生します:ERROR 1005(HY000):テーブル 'market.orders' を作成できません(エラー番号:150)
一般的な状況の問題が発生します:
主キーは、外部キーのINTチャーであるとして1、外部キーの参照型は同じではありません
図2に示すように、メインカラムは、参照テーブル内に見つかりません
図3に示すように、主キーと外部キー矛盾文字エンコーディング、または、異なるストレージエンジンであってもよいです
示すように、ここで私は、第一および第三のケースに遭遇しました:
ソリューション:
1.同じ2つのテーブルストレージエンジンを変更します
2.データ型がそれぞれ一致変更
MariaDB [市場]>ショー\ G customers_infoテーブル作成 ********* *************************** 1行****************** 表:customers_info 表を作成します:CREATE TABLEの`customers_info`(` c_num`はint(11) NOT NULL AUTO_INCREMENT、 `c_name`のVARCHAR(70)DEFAULT NULL 、 `c_birth`日時NOT NULL、 ` c_phone`のVARCHAR(50)は、デフォルトのNULL、 `c_gender` CHAR(1)デフォルトNULL、 PRIMARY KEY(` c_num`)、 UNIQUE KEY `c_num`(` c_num`) )ENGINE = InnoDBの DEFAULT CHARSET = LATIN1 セット内の1行(0.00秒) MariaDB [市場]>ショーは\ Gテーブルオーダーを作成 *************************** 1行*************************** 表:受注 表の作成:表`orders`を(CREATE `o_num`はint(11)NOT NULL AUTO_INCREMENT、 ` o_date`日付DEFAULTのNULL、`c_id` int型(50) DEFAULTのNULL、 PRIMARY KEY(` o_num`)、 UNIQUE KEY `o_num`(` o_num`)、 KEY `fk_c_num ( `` c_id`)、 CONSTRAINT `fk_c_num` FOREIGN KEY(` c_id`)REFERENCES `customers_info`(` c_num`) )ENGINE = InnoDBテーブルのデフォルトの文字セット= LATIN1 セット内の1行(0.00秒)