开发者社区> 问答> 正文

多个接口更新单表频繁创建更新时有unique key冲突问题

环境:mysql5.6、php5.5
多个api接口同时对单表c_point表更新创建数据,
c_point表结构:
id primary key int(11) auto incrment,
uid char(32) not null unique key,
temporary decimal(10,2) not null,
pressure decimal(10,2) not null,
updated_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
计算规则:
uid = md5(deviceid+pointid)
接口A:
更新c_point表的temporary字段,如果没有则创建一条新纪录。
接口B:
更新c_point表的pressure,如果没有则创建一条新纪录。
接口A、B在插入前都有select检查。
当A、B接口同时调用时出现A和B同时进行insert操作,报出
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '8b3e94ae3568001854dd7c112702dd36' for key 'uid'
针对这种多个接口针对同一个表的同一个row创建更新时怎么处理,能让两个接口都更新各自的字段?
1)插入前先select,再insert(目前的场景不合适,但仍然有必要加上去)
2)try catch 解析错误码
6
3)insert ignore
4) on duplicate key

展开
收起
蛮大人123 2016-02-11 23:30:54 2696 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    不需要使用 select 检查。直接插,冲突了就表明已经存在了,按已经存在的逻辑做。

    2019-07-17 18:41:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
事务、全局索引、透明分布式 立即下载
Phoenix 全局索引原理与实践 立即下载
面向失败设计 立即下载