数据库基础知识汇总
1 创建mysql数据库排序参数
字符集:utf8mb4
排序规则: utf8mb4_unicode_ci
2 where group by
where 是使用在统计之前,对统计前 的记录进行过滤,
having 是用在统计之后,是对聚合之后的结果进行过滤。
也就是说 where 永远用 在 having 之前,
我们应该先对筛选的记录进行过滤,然后再对分组的记录进行过滤。
3 -union union all
UNION 和 UNION ALL 的主要 区别是 UNION ALL 是把结果集直接合并在一起,而 UNION 是将 UNION ALL 后的结果进行一次
DISTINCT 去除掉重复数据。
4 timestamp自带时区
数据库时间,timestamp自带时区,什么意思
当你数据库切换了时区后,保存的数据一会自动变化为对应的时区信息
5-三范式
字段是最小的的单元不可再分
表中的字段必须完全依赖于全部主键而非部分主键。
非主键外的所有字段必须互不依赖
6 大字段
blob二进制 text文本 都是大字段,
7 默认升序排序
数据库默认是升序
8 游标
使用游标的另一个原因是避免由于并发编辑而导致元素重复或跳过的问题,比如你使用 offset 正在第 10 页上,而有人在第 1 页上删除了一个项目,则整个列表会移动,你可能会意外跳过第 11 页上 的一行数据。同样,如果有人在第 1 页上添加了一条记录而你正在第 10 页上,第 10 页中的一项也会重复显示在第 11 页上。
9 什么是binlog
binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE...)
以及表数据修改(INSERT、 UPDATE、DELETE...)的二进制日志。
binlog不会记录SELECT和SHOW这类操作,
因为这类操作对数据本身并没有修改,
但你可以通过查询通用日志来 查看MySQL执行过的所有语句。
10 主键用自增还是uuid?
innodb 中的主键是聚簇索引。
如果主键是自增的,那么每次插入新的记录,记录就会顺序添
加到当前索引节点的后续位置,
当一页写满,就会自动开辟一个新的页。
如果不是自增主键,那么可能会在中间插 入,就会引发页的分裂,产生很多表碎片!。
11 主键为什么不推荐带业务含义
(1)因为任何有业务含义的列都有改变的可能性,
主键一旦带上了业务含义,
那么主键就有可能发生变更。
主键一旦 发生变更,该数据在磁盘上的存储位置就会发生变更,
有可能会引发页分裂,产生空间碎片。
(2)带有业务含义的主键,不一定是顺序自增的。
那么就会导致数据的插入顺序,并不能保证后面插入数据的主键 一定比前面的数据大。
如果出现了,后面插入数据的主键比前面的小,就有可能引发页分裂,产生空间碎片。
12 字段为什么要not null
我对任何唾手而得,快速,出自本能,即兴,含混的事物没有信心。我相信缓慢,平和,细水长流的力量,踏实,冷静。我不相信缺乏自律精神和不自我建设,不努力,可以得到个人或集体的解放。