Chinaunix首页 | 论坛 | 博客
  • 博客访问: 60548
  • 博文数量: 16
  • 博客积分: 354
  • 博客等级: 一等列兵
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-14 18:00
文章分类

全部博文(16)

文章存档

2012年(1)

2011年(15)

分类: Mysql/postgreSQL

2011-10-22 01:09:28

on duplicate key update引发mysql主从数据不一致【mysql bug】
 
场景:表结构中有自增id为PK,有UNIQUE KEY;insert语句中不指明id
 
表结构
mysql> show create table user_task_stat\G
*************************** 1. row ***************************
       Table: user_task_stat
Create Table: CREATE TABLE `user_task_stat` (
  `id` int(11) NOT NULL auto_increment,
  `uid` int(10) unsigned NOT NULL COMMENT '用户uid',
  `finish_task_count` int(10) unsigned NOT NULL COMMENT '完成父任务个数',
  `finish_sub_task_count` int(10) unsigned NOT NULL COMMENT '完成子任务个数',
  `award_weath` int(10) unsigned NOT NULL COMMENT '累计获得财富值',
  `award_experience` int(10) unsigned NOT NULL COMMENT '累计获得经验值',
  `award_goods` varchar(80) default NULL COMMENT '累计获得的物品编号,多个逗号分隔',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `uid` (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=781800 DEFAULT CHARSET=gbk COMMENT='用户任务统计表'
 

系统中对此表的更新只有一条sql

insert ignore into user_task_stat(uid, finish_task_count, finish_sub_task_count, award_weath, award_experience, award_goo

    ds) values ($uid$, $uscore.finish_task_count$, $uscore.finish_sub_task_count$, $uscore.award_weath$, $uscore.award_experience$,

    "$uscore.award_goods$") on duplicate key update finish_task_count = finish_task_count + $uscore.finish_task_count$, finish_sub_t

    ask_count = finish_sub_task_count + $uscore.finish_sub_task_count$, award_weath = award_weath + $uscore.award_weath$, award_expe

    rience = award_experience + $uscore.award_experience$, award_goods = concat(award_goods,"$uscore.award_goods$")

 
阅读(2942) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~