MySQL的小结01

简述

最近做项目时,遇到使用MySQL的一些问题和总结

范式

https://blog.csdn.net/weixin_43433032/article/details/89293663

关于数据库设计必须要了解范式的概念,因为我们通常会结合具体场景来做设计,所以还是比较灵活的,也未必要完全遵守范式约定。

这里就不举例子了。

NULL与默认值

这个很重要,通常还是要设置默认值的,这样能避免改变非空字段为NULL的情况。

学到了时间的默认设置,好处就是,创建时间直接插入就是当下时间,更新时间就是每次做更新操作的时间,不需要写额外sql更新,非常方便。

1
2
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

MBG

Mybatis-Generator在生成BaseResultMap会有不同

若数据表字段为tinyiny(1)MBG映射jdbcTypeBITJava属性为Boolean

若为tinyint(4)MBG映射jdbcTypeTINYINTJava属性为Byte

若为datetimeMBG映射jdbcTypeTIMESTAMPJava属性为Date

这个需要注意

order by

order by子句最好依据有唯一字段排序

举个例子:

看这张表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
20	demoData	1	2021-12-31 17:13:03	2021-12-31 17:14:15
22 etjyrj 0 2021-12-31 17:13:11 2021-12-31 17:13:11
21 olafa 1 2021-12-31 17:13:08 2021-12-31 17:13:08
19 tjryj 1 2021-12-31 17:13:00 2021-12-31 17:13:00
18 rgher 1 2021-12-31 17:12:58 2021-12-31 17:12:58
17 rg 1 2021-12-31 17:12:55 2021-12-31 17:12:55
12 人物 1 2021-12-31 17:12:19 2021-12-31 17:12:19
16 健康 1 2021-12-31 17:12:19 2021-12-31 17:12:19
15 教育 1 2021-12-31 17:12:19 2021-12-31 17:12:19
14 农业 1 2021-12-31 17:12:19 2021-12-31 17:12:19
13 军事 1 2021-12-31 17:12:19 2021-12-31 17:12:19
11 法治 1 2021-12-31 17:12:19 2021-12-31 17:12:19
10 汽车 1 2021-12-31 17:12:19 2021-12-31 17:12:19
9 时政 1 2021-12-31 17:12:19 2021-12-31 17:12:19
8 科技 1 2021-12-31 17:12:19 2021-12-31 17:12:19
7 生活 1 2021-12-31 17:12:19 2021-12-31 17:12:19
6 文化 1 2021-12-31 17:12:19 2021-12-31 17:12:19
5 体育 1 2021-12-31 17:12:19 2021-12-31 17:12:19
4 金融 1 2021-12-31 17:12:19 2021-12-31 17:12:19
3 财经 1 2021-12-31 17:12:19 2021-12-31 17:12:19
2 社会 1 2021-12-31 17:06:22 2021-12-31 17:06:22
1 国际 1 2021-12-31 17:06:01 2021-12-31 17:06:01

第一次分页查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
id,
category_name,
valid,
create_time,
update_time
FROM
news_category
WHERE
valid = 1
ORDER BY
update_time DESC
LIMIT 0,
5

结果

1
2
3
4
5
20	demoData	1	2021-12-31 17:13:03	2021-12-31 17:14:15
21 olafa 1 2021-12-31 17:13:08 2021-12-31 17:13:08
19 tjryj 1 2021-12-31 17:13:00 2021-12-31 17:13:00
18 rgher 1 2021-12-31 17:12:58 2021-12-31 17:12:58
17 rg 1 2021-12-31 17:12:55 2021-12-31 17:12:55

没什么问题

下一页

1
2
3
xxx
LIMIT 5,
5

结果

1
2
3
4
5
3	财经	1	2021-12-31 17:12:19	2021-12-31 17:12:19
5 体育 1 2021-12-31 17:12:19 2021-12-31 17:12:19
6 文化 1 2021-12-31 17:12:19 2021-12-31 17:12:19
7 生活 1 2021-12-31 17:12:19 2021-12-31 17:12:19
10 汽车 1 2021-12-31 17:12:19 2021-12-31 17:12:19

???

下一页

1
2
3
xxx
LIMIT 10,
5

结果

1
2
3
4
5
10	汽车	1	2021-12-31 17:12:19	2021-12-31 17:12:19
11 法治 1 2021-12-31 17:12:19 2021-12-31 17:12:19
12 人物 1 2021-12-31 17:12:19 2021-12-31 17:12:19
13 军事 1 2021-12-31 17:12:19 2021-12-31 17:12:19
14 农业 1 2021-12-31 17:12:19 2021-12-31 17:12:19

???

“更离谱了”🤔上一页的数据怎么又来了

当时人傻了半天,最后才发现中间的数据update_time字段一样,导致MySQL无法正常排序

所以MySQL需要一个能唯一确定的字段来排序,so

1
2
ORDER BY
update_time DESC,id DESC

这样就ok

小结

还有很多问题待发现吧~