1

ある MySQL テーブルから別のテーブルにデータをインポートする必要があります。古いテーブルには、別の時代遅れの構造があります (これはあまり関係ありません)。そうは言っても、古いレコードの重複インポートを防ぐために、古いテーブルから元の ID を保存する「imported_id」という新しいテーブルにフィールドを追加しています。

私の質問は、実際に重複を防ぐにはどうすればよいですか? 新しいシステムが古いシステムと並行してロールアウトされるため、残念ながら、インポートを複数回実行する必要があります。「import_id」フィールドを PK/UNIQUE にすることはできません。これは、古いテーブルに由来しないフィールドに null 値が含まれるため、新しいフィールドを追加するときにエラーがスローされるためです。ネイティブに制約がない任意の列に対して、その場である種の INSERT IGNORE を使用する方法はありますか?

この問題について考えれば考えるほど、最初の SELECT で処理する必要があると思います。ただし、これを一般的に処理するための品質メカニズムに興味があります。

一番。

4

1 に答える 1

2

import_id 列に一意のキーを作成し、その列を null 許容として指定できるはずです。NOT NULL として指定する必要があるのは主キー列だけです。

つまり、新しいテーブルでは、null 許容の import_id 列に一意のキーを指定し、ON DUPLICATE KEYを使用して古いテーブルから新しいテーブルに挿入するときに重複キー エラーを処理できます。

これは、私が運転しているものの基本的な作業例です。

create table your_table
(id int unsigned primary key auto_increment,
someColumn    varchar(50) not null,
import_id int null,
UNIQUE KEY `importIdUidx1` (import_id)
);



insert into your_table (someColumn,import_id) values ('someValue1',1) on duplicate key update someColumn = 'someValue1';
insert into your_table (someColumn) values ('someValue2');
insert into your_table (someColumn) values ('someValue3');;
insert into your_table (someColumn,import_id) values ('someValue4',1) on duplicate key update someColumn = 'someValue4';

ここで、最初と最後の挿入は古いテーブルからの挿入を表し、2 番目と 3 番目は別の場所からの挿入を表します。

これがお役に立てば幸いです。

于 2011-09-27T16:46:29.607 に答える