Base de datos relacional (10): manejo de datos duplicados en MySQL

Pueden existir registros duplicados en las tablas de datos de MySQL, en algunos casos se permite la existencia de datos duplicados, pero en ocasiones es necesario eliminar estos datos duplicados. A continuación, presentaremos cómo evitar datos duplicados en la tabla de datos y cómo eliminar los datos duplicados en la tabla de datos.


exclusividad de los datos

Puede configurar el campo especificado en la tabla de datos de MySQL como  PRIMARY KEY (clave principal)  o un índice  ÚNICO (único)  para garantizar la unicidad de los datos.

Ejemplo:

# 下表中无索引及主键,所以该表允许出现多条重复记录。
CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

Si se establece una clave principal doble, el valor predeterminado de esa clave no puede ser NULL, se puede establecer en NOT NULL 

# 如果想设置表中字段 first_name,last_name 数据不能重复

# 一种是通过PRIMARY KEY设置主键模式来设置数据的唯一性,如下所示:
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)
);


# 另一种设置数据的唯一性方法是添加一个 UNIQUE 索引,如下所示:
CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   UNIQUE (last_name, first_name)
);

Si establecemos un índice único, cuando INSERT INTO inserte datos duplicados, la instrucción SQL no se ejecutará correctamente y generará un error. INSERT IGNORE INTO ignorará los datos existentes en la base de datos, si la base de datos no tiene datos, inserte nuevos datos, si hay datos, omita estos datos. INSERTAR IGNORAR EN Al insertar datos, después de establecer la unicidad del registro, si se insertan datos duplicados, no se devolverá ningún error, solo se devolverá una advertencia. En REPLACE INTO , si hay registros con el mismo primario o único, elimínelos primero. Insertar un nuevo registro.

# 使用 INSERT IGNORE INTO,执行后不会出错,也不会向数据表中插入重复数据:
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)

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

Estadísticas de datos duplicados

Ejemplo:

# 统计表中 first_name 和 last_name的重复记录数:

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

 En general, para consultar valores duplicados, haga lo siguiente:

  • Determine qué columna contiene posibles valores duplicados.
  • Use COUNT(*) en la lista de selección de columnas para listar esas columnas.
  • Columnas enumeradas en la cláusula GROUP BY.
  • La cláusula HAVING establece el número de repeticiones mayor que 1.

filtrar datos duplicados

Si necesita leer datos únicos, puede usar la palabra clave DISTINCT en la declaración SELECT para filtrar datos duplicados.

mysql> SELECT DISTINCT last_name, first_name FROM person_tbl;

También puede usar GROUP BY para leer datos únicos en la tabla de datos:

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

deduplicar datos

Si desea eliminar datos duplicados en la tabla de datos, puede usar la siguiente instrucción SQL:

# 先创建一个没有重复数据的临时表
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl  GROUP BY (last_name, first_name, sex);
# 删除原来的表
mysql> DROP TABLE person_tbl;
# 将临时表重命名为原来的表名
mysql> ALTER TABLE tmp RENAME TO person_tbl;

También puede agregar INDEX (índice) y PRIMAY KEY (clave principal) en la tabla de datos para eliminar registros duplicados en la tabla. Métodos de la siguiente manera:

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

Supongo que te gusta

Origin blog.csdn.net/weixin_43145427/article/details/124189810
Recomendado
Clasificación