web-dev-qa-db-ja.com

phpmyadminでインポートするときに重複レコードをスキップする方法

ローカルマシンにデータベースがあり、ホスティングのデータベースにデータをインポートしたい。両方のデータベースは同一で、同じtable namescolumn namesなどです。

exportからローカルデータベースからphpmyadminimportを介してテーブルを開くと、ホスティングのphpmyadminを介してエラーがポップアップし、primary keyのエントリが重複していることがわかります操作全体。

Phpmyadminを使用してデータをインポートし、重複エントリをスキップし、プロセスの最後に重複のリストを表示するにはどうすればよいですか?

私ができる解決策は、ホスティングでデータベース内の主キーのすべての値を呼び出し、インポートの前に重複をフィルタリングすることです。しかし、phpmyadminを使用してこれに迅速な解決策があるかどうか疑問に思っていますか?

18
Jo E.

PhpMyAdminの[設定]タブで、次の値を確認できます。

  • 設定-> SQLクエリ->複数のステートメントエラーを無視

CSV形式を使用している場合:

  • 設定->インポート-> CSV-> INSERTエラーで中止しない

SQL形式を使用している場合:

  • 設定->エクスポート-> SQL->挿入の無視を使用
38
nl-x

希望することを行うには、いくつかの方法があります。

残忍な方法:

TRUNCATE TABLE yourTbl; -- emtpies out the table

次にインポートしますが、データが失われる可能性があるため、おそらくバックアップテーブルを作成します。すべてのことを考慮しますが、これを行わないでください。以下にリストされている選択肢を確認してください。

INSERT句を使用して、独自のIGNOREクエリを作成します。

INSERT IGNORE INTO yourTbl -- as shown in the linked duplicate

ただし、ファイルをインポートしているため、クエリはLOAD DATA [LOCAL] INFILEになります。 マニュアル でわかるように、IGNOREをそのクエリに簡単に追加することもできます。

LOAD DATA LOCAL INFILE '/path/to/files/filename1.csv' IGNORE -- IGNORE goes here
    INTO TABLE your_db.your_tbl
        FIELDS TERMINATED BY ';'
               OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\n'
    (`field1`,`field2`);

それでおしまい。このような独自のクエリを作成することに不安がなければ、心配する必要はありません。他にもやりたいことがあります。
CLIの方法:

mysqlimport -i dbname fileToImport
# Or
mysqlimport --ignore dbname fileToImport

また、CLIで、上記のLOAD DATAクエリを含むファイルを作成してから、次の操作を行います。

$: mysql -u root -p
*********** #enter password
mysql> source /path/to/queryFile.sql

これには、コマンドラインにアクセスしてこのコマンドを実行する必要があります MySQLのマニュアルページはこちら

PhpMyAdminを使用すると、インポート時に「重複を無視する」というチェックボックスが表示されます。チェックしてインポートします。 スクリーンショットのあるページです
チェック "エラーを無視"を選択することもできますが、これは別のブルートフォースアプローチであり、お勧めしません。

7