0

まず、簡略化したバージョン: INSERT (実際には LOAD DATA INFILE です) 中にアクティブ化するトリガーを作成し、既にテーブルにある RMA のレコードを入力しないようにすることはできますか?

一意のレコードを持たないテーブルがあります。一部は正当な重複である可能性がありますが、データが入力されているかどうかを確認するために使用できるフィールドが 1 つあります。例えば

RMA     Op     Days
---------------------
213   Repair   0.10
213    Test    0.20
213   Repair   0.10

したがって、3 つの列をまとめてインデックスを作成することもできますが、ご覧のとおり、RMA が同じ時間のステップに 2 回含まれている可能性があるため、レコードが重複する可能性があります。基本的に、NEW.rma が既にテーブルにある場合は、次の行にスキップすることをトリガーに伝えたいと思います。

トリガーで挿入を停止させる方法があることがわかったので、私の質問は、LOAD DATA INFILE 呼び出し中に挿入をスキップして残りを続行するにはどうすればよいかということだと思います。

4

3 に答える 3

1

ロックテーブルを使用する必要はありません...このようにします(テーブル名は と言っていますrmainfo):

create table rmainfo_new like rmainfo;
load data infile 'filename' into table rmainfo_new;
rename table rmainfo to rmainfo_old,rmainfo_new to rmainfo;
drop table rmainfo_old;

ドロップ テーブルを最初に配置することもできます (make it DROP TABLE IF EXISTS rmainfo_old)。これにより、バックアップ/参照のために、実行間で _old テーブルが残ります。

于 2011-01-04T18:19:08.023 に答える
0

私が考えることができる最も簡単な方法は、新しいテーブルにロードしてから、古いテーブルを削除して新しいテーブルの名前を変更することです。LOCK TABLES最後にそのスイッチを分離できるはずです。

または、挿入ファイルに表示される行の順序が確かな場合 (つまり、ファイルに古い行の後に新しい行が続くことが保証されている場合) は、COUNT(*)最初にロード時にその数の行をスキップできます。 .

于 2010-07-22T09:32:43.887 に答える
0

RMA と OP から派生した複合キーをセットアップしていただけますか? これにより、重複したエントリがエラーとして表示されます。

于 2010-05-25T16:35:18.017 に答える