简述
最近做项目时,遇到使用MySQL
的一些问题和总结
范式
https://blog.csdn.net/weixin_43433032/article/details/89293663
关于数据库设计必须要了解范式的概念,因为我们通常会结合具体场景来做设计,所以还是比较灵活的,也未必要完全遵守范式约定。
这里就不举例子了。
NULL与默认值
这个很重要,通常还是要设置默认值的,这样能避免改变非空字段为NULL
的情况。
学到了时间的默认设置,好处就是,创建时间直接插入就是当下时间,更新时间就是每次做更新操作的时间,不需要写额外sql更新,非常方便。
`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
映射jdbcType
为BIT
,Java
属性为Boolean
,
若为tinyint(4)
,MBG
映射jdbcType
为TINYINT
,Java
属性为Byte
,
若为datetime
,MBG
映射jdbcType
为TIMESTAMP
,Java
属性为Date
。
这个需要注意
order by
order by
子句最好依据有唯一字段排序
举个例子:
看这张表
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
第一次分页查找
SELECT
id,
category_name,
valid,
create_time,
update_time
FROM
news_category
WHERE
valid = 1
ORDER BY
update_time DESC
LIMIT 0,
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
没什么问题
下一页
xxx
LIMIT 5,
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
???
下一页
xxx
LIMIT 10,
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
ORDER BY
update_time DESC,id DESC
这样就ok
小结
还有很多问题待发现吧~