2017-03-27 20 views
0

私は現在Doctrineを使用してSymfony CRMプロジェクトを作成していますが、CRMはOpenCart 2SQLSTATE一般的なエラー1005テーブル '#sql-3d63_ca5dc9'(errno:150)を作成できません

私のテーブルのいくつかは、私のプロジェクトの製品IDと顧客IDなどの顧客IDなどのOpenCartテーブルのいくつかを私のプロジェクトの別のものから参照できるようにする外部キーを持っています。

私はdoctrine:schema:update --forceを実行しようとするしかし、私は次のエラーを取得:

An exception occurred while executing 'ALTER TABLE project ADD CONSTRAINT FK_2FB3D0EE4584665A FOREIGN KEY (product_id) REFERENCES oc73_product (product_id)':

SQLSTATE[HY000]: General error: 1005 Can't create table 'oc2017_myshop.#sql-3d63_ca5dc9' (errno: 150)

を次のように上にこのエラーがスローされます

2つのステートメントは、次のとおりです。

ALTER TABLE project ADD CONSTRAINT FK_2FB3D0EE4584665A FOREIGN KEY (product_id) REFERENCES oc73_product (product_id); 
ALTER TABLE project ADD CONSTRAINT FK_2FB3D0EEB18AFA7E FOREIGN KEY (stageName) REFERENCES stage (id); 

私は、SQL-3d63_ca5dc9というテーブルを作成していないよので、私はかなり、上記のエラーが何を意味するのか理解していませんか?誰もこれにどのような光を当てることができますか?

これを手助けするために情報が必要な場合は、私に知らせてください。

+0

'# 'で始まる表名は一時表です。 – Shadow

+0

なぜ一時テーブルを作成しようとしていますか?どうしてそれはできないのですか? –

答えて

1

エラーメッセージは、外部キー制約が正しく構成されていないことを示しています。

外部キー列と参照列のデータ型の不一致があります。

または参照先の列が先頭の列で参照先の表に定義されていません。

参照先テーブルの行と一致しない行がprojectテーブルにあります。つまり、product_id列には、oc73_productテーブルに表示されない値が含まれています。

エラーメッセージでは、これらの可能性を区別しません。それは単に外来キーに問題があると言っているだけです。


表名#sql-3d63_ca5dcは中間名です。 MySQLは、ALTER TABLEが実行されているときにテーブルの作業コピーを作成し、既存のテーブルの名前を新しいコピーにスワップします。これをデバッグするための


projectproduct_id列のデータ型を比較し、oc73_product

SHOW CREATE TABLE project ; 
SHOW CREATE TABLE oc73_product ; 

データ型は、正確一致でなければなりません。

oc73_productには、product_idのキーが先頭の列として含まれていることを確認してください。これはPRIMARY KEY、UNIQUE KEYのいずれかになります。あるいは、MySQLでは、単にKEYだけでなくならせることもできます。

projectに制約に違反する行がないことを確認します。このクエリが行を返す場合、外部キー制約に違反する行があります:

SELECT j.product_id 
    FROM project j 
    LEFT 
    JOIN oc73_product d 
    ON d.product_id = j.product_id 
WHERE d.product_id IS NULL 

抗加入パターンを使用してクエリからの結果は、(上記)の結果と同等であるから:

SELECT j.product_id 
    FROM project j 
WHERE NOT EXISTS (SELECT 1 
         FROM oc73_product d 
        WHERE d.product_id = j.product_id 
       ) 

フォロー

@Shadowコメントで述べたように、SHOW ENGINE INNODB STATUSの出力は、このようなセクションがあります:

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
2017-03-27 14:14:14 7fce73f9d700 Error in foreign key constraint creation 
    for table `db`.`table_name`. 

詳細については、発生したエラー条件を参照してください。 InnoDBエンジンは、MySQLに伝えるよりも、エラーの詳細を知っています。 MySQLはちょうど "InnoDBがエラー150を報告した"と報告しています。の詳細はありません。なぜ InnoDBがそのエラーを報告していますか?

+0

あなたは 'SHOW ENGINE INNODB STATUS'ステートメント – Shadow

+0

を使ってエラーの詳細な説明を得ることができると言えるでしょう。すべてのインデックスが以前のサーバで動作していたようですが、新しいOpenCartテーブルにマップします。 SHOW ENGINE INNODB STATUSを実行すると、Permission Deniedと表示されます.... –

+0

MySQLユーザーは、 'SHOW ENGINE INNODB STATUS'を実行するためには' PROCESS'特権を与える必要があります。 (ここでは 'project'と' oc73_product'の両方のテーブルがInnoDBテーブルであると仮定しています。つまり、 'SHOW CREATE TABLE'は' ENGINE = InnoDB'です。) – spencer7593

関連する問題