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;
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);
3..按区域找出该区域流量pv最大的记录
group by 默认得到该组出现的第一条记录
只要将最大的作为第一条记录即可
SELECT * FROM (SELECT * FROM USER ORDER BY pv DESC) AS u GROUP BY u.table_id;
方法很多,我个人认为这种比较简单好理解。
那么如何按照分组取出每组最大的前两项了?(广大朋友们先思考)
4 将user表东区的数据插入用户东区表:
添加user_east表的时候忘记了个字段user_id,这里加上,后面更新的时候要用到
ALTER TABLE user_east ADD COLUMN user_id INT(10) NOT NULL AFTER pv;
注意不要加括号。
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.
大家先看一个不是左右链接链接查询的列子:
大家可以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;
在mysql的官网中,没有找到这样的实列,我在开发的过程中用到了,特别注意的是,set前后根据where过滤后必须是一对一的关系,一对多的更新直接造
成表行级锁锁定,还有就是事务的配置,执行改操作过程并未错误,接下来执行的只是查询语句错误,报错了更新语句事务无法回退的问题。所以用得要慎重。
有错误,请指出来,一起讨论,谢谢。
点击查看更多内容
5人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦