呉ユーキション - 自然生まれのMySQLの研究ノート:重複したデータでのMySQLの契約

重複データが存在することができ、時には我々は、重複データを削除する必要があるいくつかのケースでは、MySQLのデータテーブル内のいくつかの重複レコードがあるかもしれません。
防止重複データがテーブルに表示されます
指定したフィールドで提供することができるインデックスデータの一意性を保証するために、MySQLのデータテーブルPRIMARY KEY(主キー)またはUNIQUE(ユニーク)です。
次の表にする試みの一例:なし主キーインデックスは、表には、重複した複数のレコードが表示されることができます。
TABLE person_tblのCREATE
    FIRST_NAME CHAR( 20 )、
    LAST_NAME CHAR( 20 )、
    セックスCHAR( 10 
);

あなたは、テーブルのfirst_nameにおけるセットフィールドにしたい場合は、last_nameのデータを繰り返すことはできません、主キーを提供することができるデュアルモード設定データは、デュアルマスターキーの設定、そのキーのデフォルト値がNULLでない場合は、NOT NULLに設定することができる、ユニークです。次のとおりです。
TABLE person_tblのCREATE
   FIRST_NAME CHAR( 20 )NOT NULL、
   LAST_NAME CHAR( 20 )NOT NULL、
   セックスCHAR( 10 )、
   PRIMARY KEY(LAST_NAME、FIRST_NAME)
);
一意のインデックスが設定されている場合は、重複データを挿入するときに、SQLステートメントが正常に実行され、間違ってスローされることはありません。
違いINSERT INTOはやINSERT INTOをIGNORE INSERTは、データが存在する場合は何も、データベースのデータは、新しいデータを挿入し、その後、このデータをスキップしていない場合は、データベースにすでにデータを無視IGNOREています。これは、データベース内に既に隙間に挿入されたデータの目的は、データを保持します。
次の例INSERT INTOは、実行後なしエラーを無視使用し、データテーブルに重複したデータを挿入しません。
mysqlの > INSERT person_tbl(LAST_NAME、FIRST_NAME)INTO IGNORE
     - > VALUES(' ジェイ'' トーマス' );
クエリOK、影響を受けた1行(0.00 秒)
mysqlの > INSERT person_tbl(LAST_NAME、FIRST_NAME)INTO IGNORE
     - > VALUES(' ジェイ'' トーマス' );
クエリOK、影響を受けた0行( 0.00 秒)

、記録の一意性に設けられている場合に挿入重複データ挿入のみ警告として、戻りエラーを返さない場合、INSERTは、データにIGNORE。同じプライマリまたは一意のレコードが存在する場合INTOをREPLACE、最初は削除しました。次に、新しいレコードを挿入します。
データを設定する別の方法は、以下のように、UNIQUEインデックスを追加するだけです:
TABLE person_tblのCREATE
   FIRST_NAME CHAR( 20 )NOT NULL、
   LAST_NAME CHAR( 20 )NOT NULL、
   セックスCHAR( 10 )、
   UNIQUE(LAST_NAME、FIRST_NAME)
);
統計データの重複
以下の表記録のFIRST_NAME LAST_NAMEの繰り返し数:
MySQLの > SELECT COUNT(* )繰り返し、LAST_NAME、FIRST_NAMEよう
     - > person_tbl FROM
     - > GROUP BYのLAST_NAME、FIRST_NAME
     - >反復> 1です

上記のクエリは、重複レコードのperson_tblテーブル番号を返します。通常の状況下では、クエリ重複する値は、次の手順を実行します。
値が繰り返されてもよい含むカラム決定。
COUNT(使用したカラム選択リストに * )欄に掲げるものを。
GROUP BY句にリストされている列。
句セットを繰り返し数を有する1よりも大きいです。
あなたがデータを複製する必要がある場合は、重複データをフィルタリングするSELECT文でDISTINCTキーワードを使用して読み取ることができません。
mysqlの > DISTINCT LAST_NAME、FIRST_NAMEを選択
     - > person_tbl FROM;
GROUP BYはテーブル内のデータを読み取るために使用することができる重複しないデータの操作を行います。
MySQLの > SELECT LAST_NAME、FIRST_NAME
     - > person_tbl FROM
     - > GROUP BY(LAST_NAME、FIRST_NAME)。
あなたは、データテーブル内の重複データを削除したい場合は、次のSQLステートメントを使用することができます。
MySQLの > 表TMPのSELECT LAST_NAME、FIRST_NAME、person_tbl GROUP BY(LAST_NAME、FIRST_NAME、性別)から、性別を作成します。
mysqlの > DROP TABLEはperson_tbl。
MySQLの > ALTER TABLE TMP RENAME TOのperson_tbl。
もちろん、あなたはまた、テーブル内の重複データテーブルのレコードを削除するには、このような簡単な方法で、INDEX(インデックス)とPRIMAY KEY(主キー)を追加することができます。ここに方法は次のとおりです。
MySQLの > ALTER TABLEのperson_tblをIGNORE
    、PRIMARY KEY(LAST_NAME、FIRST_NAME)を追加します- >

 

おすすめ

転載: www.cnblogs.com/tszr/p/12114658.html