资讯专栏INFORMATION COLUMN

MySQL 还可以这样做

android_c / 2078人阅读

摘要:多个字段唯一性如何处理情景有张表,表里有多个字段需要唯一,不能重复,否则就是重复数据,插不进去传统做法直接给多个字段直接加唯一索引,简单粗暴现在做法新增一个字段,这个字段加唯一索引,这样可以不用加过多唯一索引你是好,我是谁你是好,我是谁数据

多个字段唯一性如何处理?

情景

有张表,表里有多个字段需要唯一,不能重复,否则就是重复数据,插不进去

传统做法

直接给多个字段直接加唯一索引,简单粗暴

现在做法

新增一个字段,这个字段加唯一索引,这样可以不用加过多唯一索引
insert into news(new_title, new_abstr, new_code) 
values("你是好","我是谁",MD5(CONCAT("你是好","我是谁")))
数据存在,就更新,不存在,就插入如何处理?

情景

有张表,里面的记录不能存在重复记录,记录存在就更新,如果不存在就插入

传统做法

先查询select,如果存在就update,不存在就insert

现在做法

mysql专门有种写法,on DUPLICATE key Update
insert into news(new_title, new_abstr, new_code, update_time, create_time) 
values("你是好","我是谁",MD5(CONCAT("你是好","我是谁")))
on DUPLICATE key Update
update_time=now(), create_time=now()
查询结果的行号如何实现?

情景

为某些功能的实现垫定基础

做法

select name,age,sex,@rownum:=@rownum+1 as row_num 
from tb_student a,(select @rownum:=0) b 
order by age asc;
组内排序,并每组取出最高点击量的2个数据

情景

经常会遇到2种情况
1、先按班级分组,并对各班学生按成绩由高到低排序(分组,并组内排序)
2、在第一种情形下,再取出每班成绩前10名

做法

分组,并组内排序:
select name,class_name,score 
from tb_student order by class_name,score desc

取出每班成绩前10名:
SELECT w.name,w.score,w.row_num 
FROM
(
    SELECT g.name,g.score,IF(@bak=g.name,@row_num:=@row_num+1,@row_num:=1) AS row_num,@bak:=g.name 
    FROM
    (SELECT * 
    FROM course AS c,(SELECT @row_num:=0,@bak:="") AS b 
    ORDER BY c.`name`,c.score DESC
    ) AS g 
) as w 
WHERE w.row_num < 11
签到,并获取连续签到的用户列表

情景

1、签到(同一天只能签到一次)
2、获取连续签到X天的用户列表

传统做法

先查询,后更新(要使用到程序,2条SQl)
SELECT * FROM student_sign_log WHERE id = 7 AND sign_date = "2018-3-24"
update student set sign=sign+1
update student set sign=1

现在做法

1、签到
UPDATE student 
SET sign_num = 
CASE
    WHEN sign_date < "2018-3-23" THEN 1
    WHEN sign_date = "2018-3-23" THEN sign_num+1
END,
sign_date = "2018-3-24"
WHERE id=7 AND sign_date < "2018-3-24"

2、获取连续签到X天的用户列表
SELECT w.name,w.score,w.row_num,w.sign_date
FROM
(
    SELECT g.name,g.score,IF(@bak=g.name and datediff(g.sign_date,@pre_date)=1,@row_num:=@row_num+1,@row_num:=1) AS row_num,@bak:=g.name,@pre_date:=g.sign_date
    FROM
    (SELECT * 
    FROM course AS c,(SELECT @row_num:=0,@bak:="",@pre_date:="") AS b 
    ORDER BY c.`name`,c.score DESC
    ) AS g 
) as w 
WHERE w.row_num < 11
根据商品分类,来获取最新日期的商品销售情况

情景

1、获取每个商品分类的最新销售日期
2、根据上面查询的日期再次查询出最新商品销售情况

做法

select a.* from pro_sale as a inner join
(select pro_class,max(sale_date) as sale_date from pro_sale group by pro_class) as b
on a.pro_class = b.pro_class AND a.sale_date = b.sale_date order by pro_class
商品按销量排序,并要把指定几个商品顶置最前面(排序作弊)

情景

经常会遇到按条件排序之外还要把指定商品顶置,此时该如何处理呢?

传统做法

(select * from product where id in (4,2,8) order by user_total desc)
union
(select * from product where id not in (4,2,8) order by user_total desc)

现在做法

select * from product order by id in (4,2,8) desc,user_total desc
分组,如何统计组内数据名称?

情景

获取所有分类下的所有商品名称统计

做法

select GROUP_CONCAT(pro_name),pro_type from product group by pro_type

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47551.html

相关文章

  • 兼容MySQL的开源分布式数据库SequoiaDB在去哪儿网的实践

    摘要:符合这样要求的分布式数据库有吗最近在开源数据库论坛大会上向开源社区做出分享的巨杉数据库恰好进入了我的视线。这个名称在数据库领域应该是比较熟悉了,他们已经做了很多年的分布式数据库,只是最近才出现在了社区。与巨杉数据库的协议转换器。 在开源数据库大会(ODF)在京举办成功落幕之际,也许很多人依然沉浸在技术大餐中,因为这些技术正是每个从业者所关注甚至是自己的饭碗。只有这样的技术会议,才会引起...

    elarity 评论0 收藏0
  • [零基础学python]网站的结构

    摘要:年,甲骨文公司收购升阳微系统公司,成为旗下产品。随着的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科和等网站。例如维基百科已于年正式宣布将从迁移到数据库。 很早很早的时候,computer这个东西习惯于被称之为计算机,因为它的主要功能是完成一些科学计算的东西,我记得自己鼓捣它的时候,就是计算,根本就没有想到它有早一日还可以用来做别的。后来另外一个名字电脑逐渐被人们接收了,特别...

    AlexTuan 评论0 收藏0
  • Mysql分页&关联查询优化

    摘要:当升级的时候需要注意关联语法运算符优先级等其他可能会发生变化的地方。优化此类分页查询的一个最简单的办法就是尽可能地使用索引覆盖扫描,而不是查询所有的列。这个技术也可以用于优化关联查询中的子句。 以下内容参考《高性能Mysql》 优化关联查询 这个话题基本上整本书都在讨论,这里需要特别提到的是: 确保ON或者USING子句中的列上有索引。在创建索引的时候就要考虑到关联的顺序。 当表A...

    RiverLi 评论0 收藏0
  • 刘寅:TiDB 工具链和生态

    摘要:本文为今年年初商业产品团队负责人刘寅在上分享的工具链和生态实录内容,详细介绍了的周边工具以及生态系统。大家下午好,我叫刘寅。部署工具就先介绍这么多。首先是,这个小工具在很多生产环境上已经用起来了。它是一个到间的实时同步工具。 本文为今年年初 PingCAP 商业产品团队负责人刘寅在 TiDB DevCon2018 上分享的 《 TiDB 工具链和生态》实录内容,详细介绍了 TiDB 的...

    Leck1e 评论0 收藏0
  • 刘寅:TiDB 工具链和生态

    摘要:本文为今年年初商业产品团队负责人刘寅在上分享的工具链和生态实录内容,详细介绍了的周边工具以及生态系统。大家下午好,我叫刘寅。部署工具就先介绍这么多。首先是,这个小工具在很多生产环境上已经用起来了。它是一个到间的实时同步工具。 本文为今年年初 PingCAP 商业产品团队负责人刘寅在 TiDB DevCon2018 上分享的 《 TiDB 工具链和生态》实录内容,详细介绍了 TiDB 的...

    xiaoxiaozi 评论0 收藏0
  • 刘寅:TiDB 工具链和生态

    摘要:本文为今年年初商业产品团队负责人刘寅在上分享的工具链和生态实录内容,详细介绍了的周边工具以及生态系统。大家下午好,我叫刘寅。部署工具就先介绍这么多。首先是,这个小工具在很多生产环境上已经用起来了。它是一个到间的实时同步工具。 本文为今年年初 PingCAP 商业产品团队负责人刘寅在 TiDB DevCon2018 上分享的 《 TiDB 工具链和生态》实录内容,详细介绍了 TiDB 的...

    whjin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<