Latest web development tutorials

MySQL trata de datos duplicados

Puede haber algunos registros duplicados de la tabla de datos de MySQL, en algunos casos, permiten que los datos duplicados, pero a veces tenemos que eliminar los datos duplicados.

En este capítulo vamos a presentar cómo evitar la duplicación de datos de tablas de datos y cómo eliminar los datos duplicados en la tabla de datos.


Evitar que los datos duplicados en la tabla aparece

Puede configurar el campo especificado en las tablas de datos MySQL para la clave principal (clave principal) o índice único (singular) para garantizar la unicidad de los datos.

Vamos a probar un ejemplo: debajo de la mesa sin índices y claves primarias, por lo que la tabla permite que aparezcan varios registros duplicados.

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

Si desea establecer la mesa campos First_Name, los datos last_name no pueden repetirse, se puede establecer un modo de clave principal dual para establecer la naturaleza única de los datos, si se configura una clave principal dual, entonces el valor por defecto de esa clave no puede ser NULL, puede ser configurado para no NULL. En la siguiente manera:

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)
);

Si establecemos un índice único, a continuación, insertar los datos duplicados, sentencia de SQL no serán ejecutados con éxito, y tirar mal.

INSERT IGNORE EN diferencia es que con la instrucción INSERT INTO INSERT IGNORE ignorar los datos que ya existe en la base de datos, si la base de datos no tiene datos, insertar nuevos datos si hay datos, entonces salte estos datos. Para que pueda retener los datos que ya existe en la base de datos, para lograr el propósito de los datos insertados en la brecha.

El siguiente ejemplo usa INSERT IGNORE INTO, no puede ir mal después de la aplicación, no va a insertar duplicado a la tabla de datos:

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)

INSERT IGNORE en la hora de la inserción de datos, después de establecer el carácter único del registro, si inserta los datos duplicados, no se devolverá un error, devuelve sólo como una advertencia. El SUSTITUIR AL en el mismo registro si la presencia primario o único, el primer eliminado. A continuación, insertar un nuevo registro.

Otro conjunto de datos es la única forma es añadir un índice UNIQUE, de la siguiente manera:

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

Estadísticas datos duplicados

A continuación vamos a repetir el número de registro de tablas en el nombre apellido y apellidos:

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

La consulta anterior devolverá person_tbl duplicar el número de registros en la tabla. En circunstancias normales, el valor de las consultas repetidas, por favor haga lo siguiente:

  • Determinar qué columna contiene el valor se puede repetir.
  • En el conteo lista de selección de columna de uso (*) los que figuran en la columna.
  • Columnas que figuran en la cláusula GROUP BY.
  • cláusula HAVING establece el número de repeticiones es mayor que 1.

Filtrar los datos por duplicado

Si es necesario leer los datos exclusivos puede utilizar la palabra clave DISTINCT en la instrucción SELECT para filtrar los datos duplicados.

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

También puede usar GROUP BY para leer los datos de la tabla no duplica los datos:

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

La deduplicación

Si desea eliminar los datos duplicados en la tabla de datos, puede utilizar la siguiente instrucción 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;

Por supuesto, también se puede añadir un índice (índice) y primay KEY (clave principal) Este sencillo método en una tabla de datos para eliminar los registros duplicados en la tabla. He aquí cómo:

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