zoukankan      html  css  js  c++  java
  • Mysql查询场景

    1、重置自增主键

    2、去重查询

    3.插入语句(重复即更新)

    一、数据库设置了自增主键,如何重置?

    truncate  table 表名

    或者

    删除主键再新增主键设置为自增

    二、如何将查询的多个字段中按某个字段去重,其余字段保留最新数据

    SELECT distinct id,name,age,createTime,updateTime FROM USER

    想要查询用户最新的访问记录,按名字去除重复。distinct 只能写在最前面,去除重复的也是按照全部要查询的字段全相等才去重。现在想查询张三、李四,时间最新的记录

    经过查询相关博客,使用 group by 可以实现去重

    SELECT id,name,age,createTime,updateTime FROM USER group by name order by createTime desc

    虽然实现了去除重复,但是显示的记录其它字段并不正确,张三记录的最新时间应该是 2020-10-07 

    解析:group by 的过程是得到结果集的第一行,第一行是按照物理存储顺序的第一行,是随机不可预测的。group by 后上下文会切换到组,而不是行,因此按照标准SQL ,

    select 字段列表无法使用非分组字段。在MySQL 中对标准的 group by 进行了扩展,可以使用非分组字段 

    SELECT id,name,age,max(createTime) createTime from user group by name

     这样查询的数据是相对正确的(事实上数据是伪造的一条记录,通过聚合函数。因为 id = 1 的记录时间实际是2020-10-5 ),因此使用了分组就不应该在 select 后使用非分组字段,不符合规范

    正确的写法:(个人觉得网上很对对这里讲解的博客都是有很大的误差)

    SELECT name,age,max(createTime) createTime from user group by name,age

     三 插入重复即更新

    将需要插入的数据设定为  unique key 

    insert into t_user(name,age)
    value('zhangsan',20)
    on DUPLICATE key update age = (10)
  • 相关阅读:
    XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件
    在Xamarin.iOS项目中使用预设数据库
    函数封装多个不同按钮的点击事件
    ajax请求数据动态渲染表格
    计算历时长度
    layui单文件上传
    滚动到顶部固定
    下载
    第一个项目技术总结
    单选框
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/10118374.html
Copyright © 2011-2022 走看看