MySQL的小结01

简述

最近做项目时,遇到使用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映射jdbcTypeBITJava属性为Boolean

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

若为datetimeMBG映射jdbcTypeTIMESTAMPJava属性为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

小结

还有很多问题待发现吧~

你可能感兴趣的:(MySQL的小结01)