0

データベースの移行を行ったばかりで、文字コードの不一致により、一部のレコードが入力されず、どのレコードが欠落しているかわかりません。以前のデータベースの完全な SQL ダンプがありますが、以前のデータベースはダウンしています。

新しいテーブルを作成する権限がありません。システムはすでに使用されているため、テーブルをクリアして再度ダンプすることはできません。前のテーブルのダンプは次のようになります。

INSERT INTO `surveys` (`id`, `column2`, `column3`, ...., `columnN`) VALUES
    (1, 'value2', 'value3', ...., 'valueN'), 
    (2, 'value2b', 'value3b', ..., 'valueNb'),
    .................
    (x, 'value2x', 'value3x', ..., 'valueNx')

1 つの行に主キー (この場合は id) が重複している場合、チャンク全体は更新されません。不足している行のみがデータベースに追加されるようにチェックを追加する方法はありますか?

4

2 に答える 2

2

ignore次のキーワードを挿入ステートメントに追加します。

insert ignore into ...

IGNORE キーワードを使用すると、INSERT ステートメントの実行中に発生したエラーは無視されます。たとえば、IGNORE を使用しない場合、テーブル内の既存の UNIQUE インデックスまたは PRIMARY KEY 値を複製する行は、重複キー エラーを引き起こし、ステートメントは中止されます。IGNORE を使用すると、行は破棄され、エラーは発生しません。無視されたエラーは、代わりに警告を生成します。

もう 1 つの方法は、データを別のテーブルに復元し、左結合でinsert ... select ...を使用し、where 句で null を使用して、存在しないデータのみをメイン テーブルに挿入することです。

于 2016-08-25T10:06:23.063 に答える