- MariaDB 教程
- MariaDB - 主页
- MariaDB - 简介
- MariaDB - 安装
- MariaDB - 管理
- MariaDB - PHP 语法
- MariaDB - 连接
- MariaDB - 创建数据库
- MariaDB - 删除数据库
- MariaDB - 选择数据库
- MariaDB - 数据类型
- MariaDB - 创建表
- MariaDB - 删除表
- MariaDB - 插入查询
- MariaDB - 选择查询
- MariaDB -Where 子句
- MariaDB - 更新查询
- MariaDB - 删除查询
- MariaDB - Like 子句
- MariaDB - 按子句排序
- MariaDB - 加入
- MariaDB - 空值
- MariaDB - 正则表达式
- MariaDB - 交易
- MariaDB - 更改命令
- 索引和统计表
- 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 停止插入重复项。
使用联接与临时表
只需执行像内部联接一样的半联接,然后删除临时表中找到的重复项。
使用插入
当 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 语句指示 MariaDB 在发现重复记录时取消插入。查看下面给出的使用示例 -
mysql> INSERT IGNORE INTO customer_tbl (LN, FN) VALUES( 'Lex', 'Luther');
另外,请注意重复项背后的逻辑。根据表数据的性质,某些表需要重复。在管理重复记录的策略中满足这一需求。