当前位置:网站首页>明明加了唯一索引,为什么还是产生重复数据?
明明加了唯一索引,为什么还是产生重复数据?
2022-08-04 15:02:00 【InfoQ】
前言
mysql8
innodb
表
唯一索引
数据
重复
1.还原问题现场
防重表
CREATE TABLE `product_group_unique` (
`id` bigint NOT NULL,
`category_id` bigint NOT NULL,
`unit_id` bigint NOT NULL,
`model_hash` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`in_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
唯一性
alter table product_group_unique add unique index
ux_category_unit_model(category_id,unit_id,model_hash);
唯一索引
2.唯一索引字段包含null
null
- 当model_hash字段不为空时,不会产生重复的数据。
- 当model_hash字段为空时,会生成重复的数据。
3.逻辑删除表加唯一索引
delete
delete from product where id=123;
物理删除
逻辑删除
update
update product set delete_status=1,edit_time=now(3)
where id=123;
name
model
name
model
delete_status
唯一索引
3.1 删除状态+1
- 添加记录a,delete_status=0。
- 删除记录a,delete_status=1。
- 添加记录a,delete_status=0。
- 删除记录a,delete_status=2。
- 添加记录a,delete_status=0。
- 删除记录a,delete_status=3。
3.2 增加时间戳字段
时间戳
1
秒
毫秒
3.3 增加id字段
主键
4. 重复历史数据如何加唯一索引?
历史重复数据
防重表
insert into product_unqiue(id,name,category_id,unit_id,model)
select max(id), select name,category_id,unit_id,model from product
group by name,category_id,unit_id,model;
id
select max(id), select name,category_id,unit_id,model from product
group by name,category_id,unit_id,model;
5.给大字段加唯一索引
5.1 增加hash字段
5.2 不加唯一索引
5.3 redis分布式锁
redis分布式锁
redis分布式锁
6.批量插入数据
for(Product product: list) {
try {
String hash = hash(product);
rLock.lock(hash);
//查询数据
//插入数据
} catch (InterruptedException e) {
log.error(e);
} finally {
rLock.unlock();
}
}
pipeline
边栏推荐
- 16. Learn MySQL Regular Expressions
- Roslyn 通过 nuget 统一管理信息
- Find My技术|防止你的宠物跑丢,苹果Find My技术可以帮到你
- 广告电商系统开发功能只订单处理
- Set partition minimum difference problem (01 knapsack)
- Basic Introduction for PLSQL
- Bluetooth Technology|In the first half of the year, 1.3 million charging piles were added nationwide, and Bluetooth charging piles will become the mainstream of the market
- C语言写简单三子棋
- 用于X射线聚焦的复合折射透镜
- 1403. Minimum Subsequence in Non-Increasing Order
猜你喜欢
Basic Introduction for PLSQL
Hangzhou Electric School Competition (Counter Attack Index)
IP第十七天笔记
leetcode:255 验证前序遍历序列二叉搜索树
饿了么智能头盔专利获授权,进一步提升骑手安全保障
特殊品种的二次开户验资金额
leetcode: 251. Expanding 2D Vectors
LeetCode_模拟_中等_498.对角线遍历
leetcode: 250. Count subtrees of equal value
【Today in History】August 4: First female Turing Award winner; NVIDIA acquires MediaQ; first Cybersecurity Challenge completed
随机推荐
Win10无法访问移动硬盘怎么解决
兆骑科创创新创业大赛活动举办,线上直播路演,投融资对接
数据链路层-------以太网协议
《分布式云最佳实践》分论坛,8月11日深圳见
特殊品种的二次开户验资金额
卖家寄卖流程梳理
期货开户之前要谈好最低手续费和交返
Cisco-小型网络拓扑(DNS、DHCP、网站服务器、无线路由器)
大众点评搜索相关性技术探索与实践
F.金玉其外矩阵(构造)
程序猿七夕礼物-如何30分钟给女朋友快速搭建专属语聊房
16. Learn MySQL Regular Expressions
Http-Sumggling缓存漏洞分析
leetcode: 253. How many meeting rooms are required at least
C# 局部函数与事件
leetcode:215无序数组中找第k大的元素
B.构造一个简单的数列(贪心)
Redis 高可用
什么,你告诉我?作用域也分种类?
手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果