Mysql笔记

菜鸟教程

注意事项

数据库所有的库名,表名,字段名使用小写
在这里插入图片描述

字段类型不同虽然也可以查询,但是会使索引失效(非数字类型)
当索引字段为数字类型,条件为字符类型,查看其执行计划仍然使用到了索引
当索引字段为非数字类型,条件为数字类型,查看其执行计划索引失效

EXPLAIN SELECT
	* 
FROM
	t_user 
where id='5'

表字段有创建时间和更新时间,直接设置默认值即可,不必在代码中维护

- 创建时间的默认值
CURRENT_TIMESTAMP
- 跟新时间的默认值
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

创建表

CREATE TABLE `t_user` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `uname` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `money` decimal(32,0) DEFAULT NULL,
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

插入数据

INSERT INTO `t_user`(`id`, `uname`, `money`, `update_time`, `create_time`) VALUES (1, '张三', 20, '2020-12-29 17:01:07', '2020-12-28 14:26:01');
INSERT INTO `t_user`(`id`, `uname`, `money`, `update_time`, `create_time`) VALUES (2, '李四', 20, '2020-12-29 17:01:10', '2020-12-28 15:26:01');
INSERT INTO `t_user`(`id`, `uname`, `money`, `update_time`, `create_time`) VALUES (3, '王五', 30, '2020-12-29 17:01:13', '2020-12-27 14:26:01');
INSERT INTO `t_user`(`id`, `uname`, `money`, `update_time`, `create_time`) VALUES (4, '赵六', 30, '2020-12-29 17:01:15', '2020-12-27 09:26:01');
INSERT INTO `t_user`(`id`, `uname`, `money`, `update_time`, `create_time`) VALUES (5, '田七', 10, '2020-12-29 17:01:19', '2020-12-26 14:26:01');
INSERT INTO `t_user`(`id`, `uname`, `money`, `update_time`, `create_time`) VALUES (6, '老八', 10, '2020-12-29 17:01:21', '2020-12-26 08:26:01');
INSERT INTO `t_user`(`id`, `uname`, `money`, `update_time`, `create_time`) VALUES (7, '胡九', 40, '2020-12-29 17:01:23', '2020-12-29 14:26:01');
INSERT INTO `t_user`(`id`, `uname`, `money`, `update_time`, `create_time`) VALUES (8, '刘十', 20, '2020-12-29 17:01:29', '2020-12-29 14:26:01');
INSERT INTO `t_user`(`id`, `uname`, `money`, `update_time`, `create_time`) VALUES (9, '的的', 10, '2020-12-29 17:01:32', '2020-11-29 14:32:44');

表结构如下
在这里插入图片描述

GROUP BY

根据创建时间,按天分组,并取每天最后一个

根据年分组使用year是没问题的
根据月分组使用month(不同年的相同月,会当作同一个月)
根据天分组使用day(不同月的相同天,会当作同一天)
根据指定时间格式分组比较靠谱

SELECT
	DATE_FORMAT( create_time, "%Y-%m-%d" ),
	MAX( create_time ) AS time 
FROM
	`user` 
GROUP BY
	DATE_FORMAT( create_time, "%Y-%m-%d" ) 
HAVING
	MAX(
	create_time)

结果
在这里插入图片描述

如果使用day

SELECT DAY
	( create_time ),
	MAX( create_time ) AS time 
FROM
	`user` 
GROUP BY
	DAY ( create_time ) 
HAVING
	MAX(
	create_time)

结果11.29没了
在这里插入图片描述

取每组最后一条

先子查询中order by后分组,需要在order by之前加上having 1或者在其之后加上limit 10000000,否则order by失效,且limit也有局限性,当数据超过1000000会丢失部分,所以推荐having 1

order by

根据money倒叙,moeny相同的根据创建时间倒叙

SELECT
	* 
FROM
	t_user 
ORDER BY
	money DESC,
	create_time DESC

结果
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值