MariaDB 处理重复项

MariaDB 处理重复项

MariaDB允许在某些情况下存在重复记录和表,这在之前的课程中已经讨论过。其中一些重复项实际上不是重复项,因为它们具有不同的数据或对象类型,或者是由于操作对象的唯一生命周期或存储引起的。这些重复项通常也不会引起问题。

在某些情况下,重复项会导致问题,并且它们通常是由于隐式操作或MariaDB命令的宽松策略导致的。有多种方法可以控制此问题,查找重复项,删除重复项和防止重复项的创建。

策略和工具

有四种主要方法来管理重复项 –

  • 使用JOIN查找重复项,并使用临时表删除它们。

  • 使用INSERT…ON DUPLICATE KEY UPDATE在发现重复项时进行更新。

  • 使用DISTINCT修剪SELECT语句的结果并去除重复项。

  • 使用INSERT IGNORE停止插入重复项。

使用JOIN和临时表

只需执行类似内连接的半连接,然后使用临时表删除找到的重复项。

使用INSERT

当INSERT…ON DUPLICATE KEY UPDATE发现重复的唯一键或主键时,它会执行更新操作。当发现多个唯一键时,它只会更新第一个。因此,在具有多个唯一索引的表上不要使用它。

请查看以下示例,它展示了在向一个包含索引值的表插入时发生了什么:

INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

注意 - 如果找不到键,INSERT…ON DUPLICATE KEY UPDATE 语句的执行方式与普通的插入语句相同。

使用 DISTINCT

DISTINCT 子句从结果中去除重复项。DISTINCT 子句的一般语法如下所示 −

SELECT DISTINCT fields
FROM table
[WHERE conditions];

注意 − 使用DISTINCT语句的结果 −

  • 当使用一个表达式时,它返回该表达式的唯一值。

  • 当使用多个表达式时,它返回唯一的组合。

  • 它不会忽略NULL值;因此,结果中也包含NULL作为唯一值。

使用DISTINCT语句对单个表达式进行如下语句的审查 −

SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';

查看以下示例,使用多个表达式 –

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

使用INSERT IGNORE

INSERT IGNORE语句告诉MariaDB在发现重复记录时取消插入。请查看下面的示例使用方法。

mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
   VALUES( 'Lex', 'Luther');

另外,注意重复项背后的逻辑。某些表格基于表格数据的性质需要重复项。在管理重复记录的策略中考虑满足这个需求。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程