Latest web development tutorials

MySQL lida com dados duplicados

Pode haver alguns registros duplicados da tabela de dados MySQL, em alguns casos, permitem que os dados duplicados, mas às vezes precisamos apagar os dados duplicados.

Neste capítulo, apresentaremos como evitar a duplicação de dados de tabelas de dados e como eliminar dados duplicados na tabela de dados.


Evitar que os dados duplicados na tabela aparece

Você pode definir o campo especificado em tabelas de dados MySQL para a chave primária (chave primária) ou o índice exclusivo (único) para garantir a unicidade dos dados.

Vamos tentar um exemplo: sob a mesa sem índices e chaves primárias, para que a tabela permite que vários registros duplicados aparecer.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

Se você deseja definir a tabela campos first_name, os dados last_name não pode ser repetido, você pode configurar um modo de chave primária dupla para definir a natureza única dos dados, se você configurar uma chave primária dupla, então o valor padrão dessa chave não pode ser NULL, pode ser definido como NOT NULL. Como se segue:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

Se definir um índice exclusivo, em seguida, insira os dados duplicados, instrução SQL não será executado com êxito, e jogue errado.

INSERÇÃO IGNORE INTO diferença é que com o INSERT INTO INSERÇÃO IGNORE ignorar os dados que já existem no banco de dados, se o banco de dados não tem dados, inserir novos dados se não houver dados, então pule esta dados. Para que possa reter os dados já existe na base de dados, para atingir o objectivo de dados inserido na abertura.

O exemplo a seguir usa INSERÇÃO IGNORE INTO, não pode dar errado após a implementação, não irá inserir duplicado para a tabela de dados:

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
    -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERÇÃO IGNORE INTO Ao inserir dados, depois de definir a singularidade do registro, se você inserir dados duplicados, não retornará um erro, ele retorna somente como um aviso. O REPLACE INTO para o mesmo registro se a presença primária ou exclusiva, a primeira eliminada. Em seguida, insira um novo recorde.

Outro conjunto de dados é a única maneira é adicionar um índice UNIQUE, como segue:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

Estatísticas dados duplicados

Abaixo, vamos repetir o número recorde de tabelas no first_name e last_name:

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

A consulta acima irá retornar person_tbl duplicar o número de registros na tabela. Em circunstâncias normais, o valor das consultas repetidas, por favor, faça o seguinte:

  • Determinar qual coluna contém o valor pode ser repetido.
  • Na contagem selecção coluna de lista utilização (*) As que constam na coluna.
  • Colunas listadas na cláusula GROUP BY.
  • HAVING define o número de repetições é maior do que 1.

dados duplicados filtro

Se você precisa ler os dados originais pode usar a palavra-chave DISTINCT na instrução SELECT para filtrar dados duplicados.

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl
    -> ORDER BY last_name;

Você também pode usar GROUP BY para ler os dados na tabela não duplicar os dados:

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

desduplicação

Se você deseja eliminar dados duplicados na tabela de dados, você pode usar a seguinte instrução SQL:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Claro, você também pode adicionar INDEX (índice) e PRIMAY KEY (chave principal) Este método simples em uma tabela de dados para excluir registros duplicados na tabela. Veja como:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);