简述
最近做项目时,遇到使用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
映射jdbcType
为BIT
,Java
属性为Boolean
,
若为tinyint(4)
,MBG
映射jdbcType
为TINYINT
,Java
属性为Byte
,
若为datetime
,MBG
映射jdbcType
为TIMESTAMP
,Java
属性为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 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 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
小结
还有很多问题待发现吧~