mysql 基础

Posted byebai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 

以上是关于mysql 基础的主要内容,如果未能解决你的问题,请参考以下文章

linux中怎么查看mysql数据库版本

从mysql的片段中加载ListView

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

使用 json rereiver php mysql 在片段中填充列表视图

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段