温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么保证插入数据一致

发布时间:2026-09-01 21:54:40 来源:亿速云 阅读:109 作者:小樊 栏目:数据库

“保证插入数据一致”通常指在并发写入、分布式系统、或业务约束下,插入的数据不会冲突、重复、丢失或破坏业务规则。下面按场景给你一套实用方案:


一、单库 / 单表层面(最常见)

1. 数据库约束(最基础)

  • 主键 / 唯一索引
ALTER TABLE user ADD UNIQUE (phone);

防止重复插入。

  • 外键约束 保证关联数据存在。

  • NOT NULL / CHECK 防止非法数据写入。

✅ 优点:数据库层强制一致
❌ 缺点:并发时可能报异常,需要业务处理


2. 事务(ACID)

BEGIN;
INSERT ...
INSERT ...
COMMIT;
  • 要么全成功,要么全失败
  • 配合隔离级别(如 REPEATABLE READ)

3. 幂等插入(防止重复提交)

常见做法:

  • 唯一请求号(request_id)+ 唯一索引
INSERT INTO order (id, req_id) VALUES (..., 'uuid');
  • 插入前先查(不推荐高并发)
  • INSERT ... ON DUPLICATE KEY UPDATE

4. 乐观锁 / 悲观锁

  • 乐观锁:
UPDATE account SET balance=balance-10, version=version+1
WHERE id=? AND version=?
  • 悲观锁:
SELECT ... FOR UPDATE;

二、高并发插入一致性

1. 分布式锁(Redis / Zookeeper)

加锁 → 查重 → 插入 → 解锁

适合:

  • 防止重复下单
  • 防止超卖

⚠️ 锁要有超时,防止死锁


2. 数据库唯一索引 + 捕获异常

try {
  insert();
} catch (DuplicateKeyException e) {
  // 已存在,忽略或返回
}

这是最可靠的方式之一。


三、分布式 / 多服务场景

1. 最终一致性(常用)

  • 本地事务 + 消息队列
  • 消费方幂等处理

2. 两阶段 / 三阶段提交(少用)

  • 复杂、性能差
  • 金融级才考虑

3. Saga 模式

  • 一个失败,补偿回滚

四、典型业务示例

✅ 防止重复注册

UNIQUE(phone)
  • 捕获重复异常

✅ 防止重复下单

订单号唯一 + Redis 锁

✅ 转账一致性

事务 + 乐观锁

五、一句话总结

数据库约束保底,事务保逻辑,锁保并发,幂等保重复。

如果你能说下:

  • 单库还是分布式?
  • 什么业务(订单 / 日志 / 用户)?
  • 并发量大概多少?

我可以直接给你具体 SQL / 代码方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手