- MariaDB 教程
- MariaDB - 首页
- MariaDB - 简介
- MariaDB - 安装
- MariaDB - 管理
- MariaDB - PHP 语法
- MariaDB - 连接
- MariaDB - 创建数据库
- MariaDB - 删除数据库
- MariaDB - 选择数据库
- MariaDB - 数据类型
- MariaDB - 创建表
- MariaDB - 删除表
- MariaDB - 插入查询
- MariaDB - 选择查询
- MariaDB - WHERE 子句
- MariaDB - 更新查询
- MariaDB - 删除查询
- MariaDB - LIKE 子句
- MariaDB - ORDER BY 子句
- MariaDB - JOIN
- MariaDB - NULL 值
- MariaDB - 正则表达式
- MariaDB - 事务
- MariaDB - ALTER 命令
- 索引和统计表
- MariaDB - 临时表
- MariaDB - 表克隆
- MariaDB - 序列
- MariaDB - 管理重复数据
- MariaDB - SQL 注入防护
- MariaDB - 备份方法
- MariaDB - 备份加载方法
- MariaDB - 有用函数
- MariaDB 有用资源
- MariaDB - 快速指南
- MariaDB - 有用资源
- 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');
此外,请注意重复数据背后的逻辑。某些表需要重复数据,具体取决于该表数据的性质。在管理重复记录的策略中考虑这一需求。