- 主题:mysql如何支持同一主键记录下的两次写入操作
目标功能是根据request消息中信息更新数据库。
设计方案是把消息中携带的id作为表的主键,消息中其他信息insert到表的相应字段;
目前的场景存在2条消息携带同一id,但携带不同的信息,如何把两条带有相同id的消息中的各自信息insert到表中的同一条记录中的相应字段。
如果直接insert,会报pymysql.err.IntegrityError: (1062, "Duplicate entry 'xxxx' for key 'xxxx.PRIMARY'"),mysql不支持对同一主键记录的两次insert操作
--
FROM 101.204.53.*
这个id是一个session id,我想记录每个session的状态位信息。
但服务器端存在对同一个session发出两条消息,并且提供的是不同状态位信息,我想拼接出一个session的所有状态位信息。
有什么好的方案么?
【 在 adoal 的大作中提到: 】
: 既然id会在不同消息里存在重复,为啥要把id设计成主键
:
--
FROM 101.204.53.*
我发现这个问题的问法应该是’mysql中如果不存在则insert,存在则update‘
按照这个问法,找到解决方案了
谢谢了哈
【 在 adoal 的大作中提到: 】
: 你前面做的事情是想把id相同的两条数据都insert到数据库里,
: 并没有涉及到两条数据的业务字段拼接。
: 那么,如果可以insert,你打算按什么规则拼接?这才是你应该
: ...................
--
FROM 101.204.53.*
确实如此,谢谢了哈
今天一天成就满满,以前没用过数据库,自己的web application需要记录数据。
上午从安装mysql服务器开始,边查便找,现在主体代码调试通过
python真是利器
【 在 mybjlife 的大作中提到: 】
: 可以用insert on duplicate update语法,update子句部分各自更新自己的状态位
--
修改:DragonDon FROM 101.204.53.*
FROM 101.204.53.*
就是两条消息各有一些信息字段,本想各自insert合成一条,就是拼接的含义,但sql不支持。
以前没用过数据库,语句都是现查的,有些概念也没有掌握清楚,表达可能不合规则
【 在 adoal 的大作中提到: 】
: 那你前面说的“拼接”,表达很有误导性啊。
: 实际要的是以新代旧,就简单多了,纯粹是SQL常见的upsert/merge语法而已。
:
--
FROM 101.204.53.*
这个关键词不行
【 在 Knightmare 的大作中提到: 】
: 关键词replace
:
--
FROM 101.204.53.*
消息确实会有重发和乱序
但采用insert on duplicate update语法,应该没有问题吧
【 在 lipp 的大作中提到: 】
: 应用层架构设计,应该可以兼容网络层经常出现的重发和乱序。
: 你目前的设计,自增uid+双insert还好,倘若是insert+update,就容易因为网络层包乱序而带来应用层语义不确定。
:
--
FROM 101.204.53.*