短时间内同时更新数据库的问题

newbting 2014-01-08 05:07:30
发现 网站 领取任务的人数 和字段中得任务人数不一样,多出一些。
任务人数是对 每次 用户进行注册时 进行 +1 操作,
根据查看 应该是 同一秒进行注册的人,获取的当前数据库人数一样, 都进行+1操作,也就只加了一次,,
求教下各位,这个有什么方法解决吗
...全文
617 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
justinlu36 2015-03-03
  • 打赏
  • 举报
回复
估计楼主是用rule 做这个功能,那是会出现这个问题。应该用trigger。
huguangshanse00 2014-11-05
  • 打赏
  • 举报
回复
建议将“领取任务的人数 和字段中得任务人数” 这两个+1的SQL语句放在同一个事务(begin;commit)中或在1个函数中处理,这样就能避免上面所说的问题,同时需要说明的是:如果多个事务同时并发,对于updae操作会发生锁表现象(互斥锁,表级别),即这些事务会串行化处理保持事务的一致性。
zeeeitch 2014-11-05
  • 打赏
  • 举报
回复
方法1 代码用锁表、update +1 、解锁;查询人数直接select 方法2 做一个表辅助,每个人+1,这个表insert一行,查询人数,select count(*) from 辅助表 方法3 做一个表辅助ta,每个人+1,这个表insert一行;系统后台每隔一段时间,更新这个表的总数到另一个表tb,update tb set xxx= select count(*) from ta; 查询人数,select xxx f rom tb
zeeeitch 2014-11-05
  • 打赏
  • 举报
回复
一般不这样设计啊,
trainee 2014-01-09
  • 打赏
  • 举报
回复
你是如何设计的。 把你的代码贴出来,才知道原因。

972

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧