与えられたソリューション:ERROR 1005(HY000):テーブル 'market.orders' を作成できません(エラー番号:150)

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秒)
  

  

 

おすすめ

転載: www.cnblogs.com/python-wen/p/11545515.html