mysql 分组更新_MySql的批量插入批量更新以及分组取最大值

1,为了演示,随便创建的两个表,用户表uesr,东区用户表user_east:

CREATE TABLE USER(

id INT(10) NOT NULL AUTO_INCREMENT,

table_id INT(4) NOT NULL,

NAME VARBINARY(20) NOT NULL,

address VARBINARY(20) NOT NULL,

pv INT(10) DEFAULT 0,

PRIMARY KEY(id)

) DEFAULT CHARSET = utf8;

CREATE TABLE user_east(

id INT(10) NOT NULL AUTO_INCREMENT,

NAME VARBINARY(20) NOT NULL,

address VARBINARY(20) NOT NULL,

pv INT(10) DEFAULT 0,

PRIMARY KEY(id)

)DEFAULT CHARSET = utf8;

AAffA0nNPuCLAAAAAElFTkSuQmCC

2 user表批量插入数据:

insert into user(table_id,name,address,pv) values

(1,'张三','东区',44),

(2,'李四','西区',66),

(1,'王五','东区',33),

(2,'吴磊','西区',55),

(1,'花千骨','东区',55),

(3,'张小凡','南区',30),

(3,'白青龙','南区',50);

AAffA0nNPuCLAAAAAElFTkSuQmCC

3..按区域找出该区域流量pv最大的记录

group by 默认得到该组出现的第一条记录

AAffA0nNPuCLAAAAAElFTkSuQmCC

只要将最大的作为第一条记录即可

SELECT * FROM (SELECT * FROM USER ORDER BY pv DESC) AS u GROUP BY u.table_id;

AAffA0nNPuCLAAAAAElFTkSuQmCC

方法很多,我个人认为这种比较简单好理解。

那么如何按照分组取出每组最大的前两项了?(广大朋友们先思考)

4 将user表东区的数据插入用户东区表:

添加user_east表的时候忘记了个字段user_id,这里加上,后面更新的时候要用到

ALTER TABLE user_east ADD COLUMN user_id INT(10) NOT NULL AFTER pv;

AAffA0nNPuCLAAAAAElFTkSuQmCC

注意不要加括号。

INSERT INTO user_east(NAME,address,pv,user_id) SELECT NAME,address,pv,id FROM USER WHERE table_id = 1;

5 批量同步更新user表的pv和对应的user_east的pv字段,都加1.

大家先看一个不是左右链接链接查询的列子:

AAffA0nNPuCLAAAAAElFTkSuQmCC

大家可以join left on查询来看,就会有数据了。为空的部分都是null。

UPDATE USER u1,user_east u2 SET u1.pv = u1.pv*10,u2.pv=u1.pv*10 WHERE u2.user_id = u1.id AND u1.table_id = 1;

AAffA0nNPuCLAAAAAElFTkSuQmCC

在mysql的官网中,没有找到这样的实列,我在开发的过程中用到了,特别注意的是,set前后根据where过滤后必须是一对一的关系,一对多的更新直接造

成表行级锁锁定,还有就是事务的配置,执行改操作过程并未错误,接下来执行的只是查询语句错误,报错了更新语句事务无法回退的问题。所以用得要慎重。

有错误,请指出来,一起讨论,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值