JavaGuide-对于数据库方面的总结记录

本文介绍了数据库的基础概念,包括数据库和数据库管理系统,元组、码、候选码、主码、外码等概念。详细讲述了ER图、数据库范式(1NF、2NF、3NF)以及函数依赖、部分函数依赖和完全函数依赖。还讨论了MySQL中的存储过程、DML、DDL和DQL的区别,以及字符集的选择和MySQL面试题总结。
摘要由CSDN通过智能技术生成

数据库

数据库基础

什么是数据库, 数据库管理系统

  • 数据库: db
  • 数据库管理系统: database management system dmbs 操作数据库的一个软件

什么是元组, 码, 候选码, 主码, 外码, 主属性, 非主属性?

  • 元组: 关系是一张表,元组就是行,列是属性
  • 码: 码是标识实体的属性,也就是列
  • 候选码: 可以唯一标识一个实体的一个元组,可以是一个列,也可以是多个,并且需要注意的是,候选码是最精简的,不能说,子集也能标识这个实体
  • 主码: 也叫主键,在候选码中选出来的,一个实体只有一个,但是可以有多个候选码
  • 外码: 外键, 一个表的属性是另一个表的主键,这个属性就是外键
  • 主属性: 候选键中出现的列就是主属性
  • 非主属性: 没出现过的

ER图

Entity Relationship Diagram
由三个组成

  • 实体: 相当于类对象
  • 属性: 相当于列
  • 联系: 实体和实体之间的关系,一对多,多对一啥的

数据库范式了解吗?

  • 第一范式: 属性不能再分
  • 第二范式: 再1nf的基础上,消除了非主属性部分函数依赖
  • 第三范式: 在2n的基础上,消除了非主属性传递函数依赖

函数依赖,例如,Y依赖于X, 意思是,确定了X的值,可以推出Y的值,类似于主键,我们通过主键的值,可以推出其他列的值,写作 X -> Y,这里理解为推出比较好理解这个写法


部分函数依赖: 举例子, (学号,身份证号,姓名)

学号,身份证号都是主键

学号可以推出姓名
身份证也可以推出姓名

也就是说,姓名,分别依赖于学号 + 身份证号


完全函数依赖: 举例子, (学号,班级,姓名)

这里假设不同的班级学号是有相同的

官方的说法,非主属性,依赖于全部关键字

也就是说,这里的姓名,是依赖于学号 + 班级的

也就是说,你单独知道学号的化,你推不出姓名,单独知道班级的化,你推不出姓名

部分函数依赖 要和完全函数依赖一起看,总结来看,
对于这里的讨论,必须是有多个主键的,才有讨论的价值,如果只有一个主键,那么基本上都是满足第二范式的,因为本来就是完全的函数依赖

部分函数依赖,就是依赖部分的主键, 就是说非主属性,只依赖于一部分的主键

完全函数依赖,就是依赖全部的主键, 反过来说,就是全部的主键加起来,才能推出非主属性

传递函数依赖: 看名字,就能懂,Z 依赖于 Y, Y 依赖于X ,那么Z传递函数依赖于X,就是一个传递的事情,所以需要消除中间的过程,不然会冗余 + 异常

总结

1nf: 属性不能再分
2nf: 非主属性不能部分依赖于主键
3nf: 非主属性不能传递依赖于主键

为什么不推荐外键

太复杂
分库分表不友好

优点:
虽然外键不好,但是也要看情况,如果不涉及分库分表,并发量不高,可以用外键
外键可以保持很好的一致性
级联操作也方便,减少代码量

存储过程

存储过程,可以理解为mysql中的函数,但是不好调试 + 扩展,alibaba禁止

DML DDL DQL

DML: M是Manipulation,操作的意思,也就是增删改查
DDL: 中间的D是definition,定义的意思,和表结构有关,操作表结构的就是ddl
DQL: Q是query的意思,特别从dml中提出来的,因为select不会对表进行破坏

drop delete truncate 区别

  • drop: 直接删除表
  • truncate: 清数据,表还在,并且自增id从1开始
  • delete; 删除行,如果没有where语句,和truncate 差不多

区别:

  • 属于不同数据语言,drop是ddl,delete + truncate是dml
  • 执行速度不同,drop > truncate > delete ,这个是相当然的,drop要写binlog日志,truncate要重置计数器,所以就是这个速度

数据库设计通常分为哪几步?

  • 需求分析 分析自己要干啥
  • 概念结构分析: 画er图
  • 逻辑结构分析: er图变成表
  • 物理结构分析: 设计合理的数据结构
  • 数据库实施: 编码 + 测试 + 运行
  • 数据库的运行和维护

字符集详解

mysql有两个utf8编码实现,utf8
utf8mb4

字符集是什么?

字符集是字符的集合
将字符转换为二进制,是字符编码
将二进制转换为字符,字符解码

ASCII

美国人发明的,长度为1bit
最高位是0,为校验位,所以ascii码,可以定义128个字符

太少了,所以人们做了拓展,ASCII扩展字符集,它是真正意义上的8bit
所以是256个字符,2的8次方

GB中文字符

GB开头的一般都是中文字符集

Unicode & UTF-8

为了解决世界的字符问题,就用这个统一的字符集Unicode

这个Unicode类似于一个标准,统一了基本上所有的字符

而Unicode没有规定如何存这些字符

所以就有了UTF-8 UTF-16 UTF-32

UTF-8 用1 到 4个字节来存
UTF-16 用2 或 4个字节来存
UTF-32 用4个字节来存

UTF-32,虽然是定长的,但是很耗内存,所以一般用utf-8

MySQL字符集

默认字符集

5.7是latin1 8.0是utf8mb4

utf8 和utf8mb4

utf8只能存1到3个字节,不能存4个字节的表情包 + 复杂的繁体字
utf8mb4,最多支持4个字节,正版,就是为了解决utf8的历史遗留问题

MySQL常见面试题总结

MySQL常见面试题总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

憨憨小江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值