开发学院

您的位置:首页>教程>正文

教程正文

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'

注意——如果找不到key, INSERT...ON DUPLICATE KEY UPDATE语句的执行类似于普通的insert语句。

使用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');

  另外,请注意重复项背后的逻辑。一些表需要根据该表数据的性质进行重复,在管理重复记录的策略中满足这一需求。