一、数据库设置了自增主键,如何重置?
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)