2012-03-26 9 views
-4

テーブルにデータを挿入する前に、重複レコードとそのレコードのリストを確認する必要があります。 少なくとも1つの重複がある場合は、クエリーは何も挿入しないでください。挿入するレコードの複数の重複レコードをチェックする

数:表中〜1000の

行:〜1.000.000

表:

CREATE TABLE `test` (
    `A` varchar(19) NOT NULL, 
    `B` varchar(9) NOT NULL, 
    KEY `A` (`A`), 
    KEY `B` (`B`) 
) ENGINE=InnoDB; 

私は両方の列をチェックする必要があります。

何これを行う効率的な方法です。

ありがとうございます。

P.S. phpとmysqlを使用することを検討してください

+0

として実際に何も挿入しません。念頭に置かれるのは、すべてのレコードを重複しているかどうかチェックすることだけです。しかし、効率的ではないようです。 あなたは何をしますか? – Turgut

+0

一意のキーを使用して重複を拒否する何かがありますか? – gapple

+0

@Turgut:私たちは質問をする前に何も試してみない人が好きではありません:)あなたは行って試してみるべきです*。たぶんあなたはより良い質問をするでしょう。たぶんあなたは全く疑問を持たないでしょう。 –

答えて

1

重複とは、ユーザー名が既に存在することを意味します。あなたは試すことができます:

1]あなたのインサートリストにありますすべてのユーザー名のグループへのforループを使用します。擬似コードは、次のとおりです。

$names=""; 
    for(each element){ 
     $names.=$val.", "; 
    //remove last comma "," 

をその後、すべての重複したエントリを取得するには、次のSQLステートメントを使用します。すべての重複のリストを取得した

select * from myTable where username in ($names); 

、その後、

insert into myTable (username, address, otherstuff) 
values("henry", "35 skid", "who knows") 
ON DUPLICATE KEY UPDATE 
otherstuff = values(otherstuff); 
0

出力するためには、とにかくすべてを挿入してからselect duplicatesを入力する方法があります。すべての操作がロールバックされていることが判明した場合それはかなり高価だろう。