2017-02-04 6 views
0

MYSQLを初めて使用していて、データをテーブルにロードした後に特定の行が削除されるときに問題が発生します。たとえば、我々は次のスキーマMYSQLデータをロードするときに特定の行が削除される

(ユーザーID INTEGER、UserInterests VARCHAR(200))

を持っていると私はこの

1|*|Sports 
1|*|Gaming 
1|*|Eat 
2|*|Sports 
2|*|Gaming 
2|*|Sleep 

などのデータは、私がこの

のようにロードを実行持っていると言うことができます
LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE Users 
FIELDS TERMINATED BY '|*|'; 

ただし、同じUserInterestsを持つ行が削除されるため、次のクエリを実行すると

私はミスをやっているところ
SELECT * FROM Users; 

私は

1 EAT 
1 Gaming 
2 Sleep 
1 Sports 

を取得しかし、私は

1 EAT 
1 Gaming 
1 Sports 
2 Sleep 
2 Sports 
2 Gaming 

のような何かを得ることが期待誰かが説明していただけますか?

答えて

0

列のユニークなインデックス(プライマリキーなど)を使用する場合は、これが正常な動作になります。UserInterestsユニークなインデックスを使用すると、同じデータを複数回使用することができなくなります。

LOCALも影響するエラー処理:

  • では通常、あなたが複製キーエラーが出るだろうが、あなたはLOAD DATA LOCAL INFILELOCALを使用する場合、あなただけの警告が表示されます、documentationを参照してくださいLOAD DATA INFILE、データ解釈および重複キー・エラーによって操作が終了します。

  • LOAD DATA LOCAL INFILEでは、データ解釈および重複キーエラーが警告となり、操作の途中でファイルの送信を停止する方法がないため、操作が続行されます。重複キーエラーの場合は、IGNOREが指定された場合と同じです。 IGNOREについては、このセクションの後半でさらに説明します。

だからあなたのインデックスをチェックして修正します。私は現在、そのテーブルのプライマリキーとしてUserInterestsを使用しているとしますが、おそらく両方のカラムで構成されるプライマリキーを持つ必要があります。

+0

ありがとうございます。 1つの主キーと1つの他の列がある多対多の関係を構築しようとしていました。私はテーブルを3つのテーブルに分割して問題を解決することができました。 –

関連する問題