Atitit 数据库重复数据产生原因与解决总结 目录 1. 原因 1 1.1. 缺少数据约束校验 1 1.2. 表关系关联设计错误 1 2. 约束种类 1 2.1. 分类 表级约束vs列级别约束 2

本文探讨了数据库中重复数据产生的原因,包括数据约束缺失和表关系设计错误,并详细介绍了各种约束类型,如非空、唯一性、主键、外键及检查约束。文章还提供了多种解决方案,涵盖主键与外键的增设、unique索引、触发器约束、group by与聚合函数应用、UDF join模式以及merge语句的使用。

Atitit 数据库重复数据产生原因与解决总结

 

目录

1. 原因 1

1.1. 缺少数据约束校验 1

1.2. 表关系关联设计错误 1

2. 约束种类 1

2.1. 分类 表级约束vs列级别约束 2

3. Other 2

3.1.1. 表级约束,给多个字段联合约束 2

4. 解决法总结 2

4.1. 增加主键,外键 2

4.2. 增加unique索引 2

4.3. Trigger约束 实现检查约束 2

4.4. 关联limit1 3

4.5. distinct 3

4.6. 适当groupby 分组运算 配合聚合函数max等 3

4.7. 放弃表join,使用select字段udf join模式 3

4.8. Merge 融合语句(需要unique或union unique索引 3

 

 

  1. 原因

 

    1. 缺少数据约束校验
    2. 表关系关联设计错误

导致left join多条对应

  1. 约束种类
  • 非空约束(not null)
  • 唯一性约束(unique)
  • 主键约束(primary key) PK
  • 外键约束(foreign key) FK
  • 检查约束(目前MySQL不支持、Oracle支持)
    1. 分类 表级约束vs列级别约束

多列一般啊属于表级约束

外键约束(foreign key)FK只能是表级定义

 

  1. Other

联合约束 可以使用unique实现

-> unique(name,email)

联合约束,表示两个或以上的字段同时与另一条记录相等,则报错

      1. 表级约束,给多个字段联合约束

 

  1. 解决法总结

 

    1. 增加主键,外键
    2. 增加unique索引
    3. Trigger约束 实现检查约束

建议trigger仅仅trig,主体检查放入sp udf 方便测试。。

    1. 关联limit1 
    2. distinct
    3. 适当groupby 分组运算 配合聚合函数max等

 groupby  count配合having

思路, group by 分组可以对多个列进行分组, 分组后可以过滤掉重复的数据

 

count数查询出来了,那么count>1的自然是重复的数据 配合having

SELECT id,`name`,age,count(1) as c

FROM user GROUP BY `name`,age having c > 1

 

    1. 放弃表join,使用select字段udf join模式
    2. Merge 融合语句(需要unique或union unique索引
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值