2016-03-18 22 views
1

osCommerceの古い実装を再作成し、古いデータベースのデータを新しいものに再導入しようとしています。私はphpMyAdminを使って古いテーブルからデータをエクスポートしました。私はそれらを新しいデータベースにインポートしようとしたときに、一連のエラーが発生しました。ここでは、わかりやすくするために、この問題を単一のINSERT文に単純化しています。あるデータベースから別のデータベースにmysqlデータを転送できません

文は次のとおりです。

INSERT INTO `address_book` (`address_book_id`, 
          `customers_id`, 
          `entry_gender`, 
          `entry_company`, 
          `entry_firstname`, 
          `entry_lastname`, 
          `entry_street_address`, 
          `entry_suburb`, 
          `entry_postcode`, 
          `entry_city`, 
          `entry_state`, 
          `entry_country_id`, 
          `entry_zone_id`) 
    VALUES (1, 1, 'm', '', 'Mary', 'Smith', 
      '1234 Pleasant Court', '', '67890', 
      'Hometown', 'state', 123, 0); 

私はphpMyAdminの経由ファイルからインポートしようとすると、私はエラーを取得する:“#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1.”

私は、[編集]ボタンをクリックし、クエリを再送信した場合、私は別のものを得ますエラー:“#1062 - Duplicate entry '1' for key 'PRIMARY'.” address_book_idフィールドはこのテーブルの主キーで、自動インクリメントフィールドです。

まだ編集画面で、address_book_idの値をNULLに変更して再送信すると、そのクエリが受け入れられます。

問題が解決したと考えて、インポートファイルのaddress_book_idの値をNULLに変更し、再度インポートを試みました。そして再び#1064エラーが発生します。私はすぐに編集をクリックした。私はその声明を編集しなかったが、それをそのまま提出した。今回は、声明が受け入れられました。

ダウンロードしたデータのaddress_book_id値を処理する際に問題があるようです。私は古いデータベースの多数のテーブルから何百ものインデックス値を持っています。明らかに、インデックス値を変更して一度に1つずつ提出する必要はありません。

私はphpMyAdmin 3.5.1で作業しています。何が起こっているか考えてみませんか?

+1

はタイプミスがある - ** VALUES ** - **ないALUES ** - address_book INTO NSERT(address_book_id、customers_id、entry_gender、entry_company、entry_firstname、entry_lastname、entry_street_address、entry_suburb、entry_postcode、entry_city、entry_state、entry_country_id、 ** 'ALT' ** ** ALUES **(1、1、 'm'、 ''、 'Mary'、 'Smith'、 '1234 Pleasant Court'、 '67890'、 'Hometown'、 'state' 0)。 –

答えて

0

address_book_idを付けないでください。明らかに、別のテーブルから単純にコピーできないプライマリキーがあります。新しいIDを自動的に割り当てる必要があります。

+0

ありがとうございます。私はそれを試してみましょう。 – gpinzino

+0

@Johannesは、テーブル間の参照整合性を解除するキーを再割り当てしませんか?これは私に危険なようです。 –

+0

@IsaacBennetch:キーを再割り当てしますか? - 彼はあるテーブルから別のテーブルにデータをコピーしています - "other"テーブルには既にそれ自身のプライマリキーがあるはずです。したがって、キーが整数で、すでに存在する場合、質問の第2段落で説明されているエラーが発生します。元のインデックス値を保持する必要がある場合は、プライマリキーの列にコピーするのではなく、この目的のために作成する必要がある別の列にコピーする必要があります(また、一意のキーである必要はありません)。テーブル構造(特にキー/ ID)は説明されていないので、そのように見えると思います... – Johannes

0

これをしばらくプレイした後、最良の方法は、テーブルを削除してから再作成することです。私は2つのテーブルでこれを試して、エラーを投げずにidフィールドを含めて自分のデータをアップロードすることができました。テーブルは正常に動作しているようです。

関連する問題