0

これを見てくれてありがとう。MySqlで作業しているこのプロジェクトには少し助けが必要です。

プロジェクトの一部として、稼働中のMySqlデータベースにいくつかのものをロードする必要があります。

表の各列に必要な情報はDocumentation、ハードドライブのテキストファイルに保存されます。

たとえば、ドキュメントテーブルの1つの列は「ports」であるため、コンピュータ上に多数のポート番号などを含むports.txtファイルがあります。

私はこのmysqlスクリプトをphpMyAdminを介して実行しようとしました。

LOAD DATA INFILE 'C:\\ports.txt" INTO TABLE `Documentation`(`ports`). 

正常に実行されたので、必要な他のロードデータを実行しました。

LOAD DATA INFILE 'C:\\vlan.txt' INTO TABLE `Documentation` (`vlans`)

これも正常に完了しましたが、ポート列への最後のエントリの後にすべての行がVLAN列に追加されました。

なぜこれが起こったのですか?これを修正するために私にできることはありますか?ありがとう

4

1 に答える 1

1

なぜこれが起こったのですか?

LOAD DATA指定されたテーブルに新しい行を挿入します。既存の行は更新されません。

これを修正するためにできることはありますか?

MySQL は、テーブルが特定の順序で保持されることを保証しないことを理解することが重要です。そのため、最初LOADの の後、データが挿入された順序が失われて忘れられる可能性があります。したがって、通常は、インポートするにそのようなデータを関連付けます (たとえば、単一の CSV ファイル内の同じレコードの列として)。

それぞれが列を持つ一時テーブルにデータを格納し、そのような自動インクリメントされた識別子が 2 つのテーブル間で整列されたままになることを期待でき ます(MySQL はこれをまったく保証しませんが、この場合、各レコードには 1 から順番に番号が付けられていることがわかります)。 ); そこに到達したら、次の行に沿ってクエリを実行できます。LOADAUTO_INCREMENT

INSERT INTO Documentation SELECT port, vlan FROM t_Ports JOIN t_Vlan USING (id);
于 2012-05-04T15:38:45.293 に答える