MySQL面试篇章——MySQL基础复习

文章目录

  • MySQL基本介绍
  • MySQL数据类型
    • 数值类型
    • 字符串类型
    • 日期和时间类型
    • ENUM和SET
  • MySQL运算符
    • 算数运算符
    • 逻辑运算符
    • 比较运算符
  • MySQL常用函数
    • 字符串函数
    • 数值函数
    • 时间和日期函数
    • 聚合函数
  • MySQL完整性约束
  • 范式
    • 第一范式(1NF)
    • 第二范式(2NF)
    • 第三范式(3NF)
    • BC范式(BCNF)
    • 第四范式(4NF)

MySQL基本介绍

  • 关系型数据库:建立在关系模型的基础上的数据库。数据被存放在了各种表中(比如用户表),表中的每一行就存放着一条数据(比如一个用户的信息)

  • table:二维表(行:记录;列:字段/属性)

  • 熟悉的关系型数据库还有SQL Server、Oracle、MariaDB、DB2

  • MySQL区别于其它关系型数据库很大的一个特点就是支持插件式的存储引擎,支持如InnoDB, MyISAM,Memory等

  • MySQL的服务器模型采用的是I/O复用+可伸缩的线程池,是实现网络服务器的经典模型(磁盘I/O操作会极大的影响速率)

扩展介绍:

关系模型的常用概念:

  • 关系:一张二维码,每个关系都具有一个关系名,也就是表名
  • 元组:二维表中的一行,在数据库中被称为记录
  • 属性:二维表中的一列,在数据库中被称为字段
  • :属性的取值范围,也就是数据库中某一列的取值限制
  • 关键字:一组可以唯一标识元组 的熟悉,数据库中常称为主键,由一个或多个列组成
  • 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2,…,属性N),在数据库中被称为表结构

非关系型数据库:非关系型的、分布式的,且一般不保证遵循的ACID原则的数据存储系统,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对

面试考点:关系型数据库和非关系型数据库的区别

最大的区别:关系型数据库是table表的形式,有行有列的二维表,非关系型数据库是key-value键值对的形式

MySQL数据类型

MySQL数据类型定义了数据的大小范围,因此使用时选择合适的类型,不仅会降低表占用的磁盘空间,还能间接的减少磁盘I/O的次数,提高了表的访问效率,而且索引的效率也和数据的类型息息相关

数值类型

在这里插入图片描述

建议:浮点类型推荐使用decimal类型(保存为字符串格式)

age INT(9)
# 整型占用内存的大小是固定的,和具体的类型是强相关的,但是(M)表示的是整数显示的宽度

面试考点:整数类型的 UNISIGNED 属性有什么用?

UNISIGNED 表示不允许负数的无符号整数,可以将正整数的上限提高一倍,因为不需要存储负数。

例如:TINYINT UNSIGNED 范围:0 ~ 255;普通的 TINYINT 范围:-128 ~ 127

面试考点:DECIMAL 和 FLOAT/DOUBLE 的区别是什么?

DECIMAL:定点数,可以存储更加精确的小数点(可以避免浮点数带来的精度损失)

FLOAT/DOUBLE:浮点数:只能存储近似的小数值

字符串类型

在这里插入图片描述

日期和时间类型

在这里插入图片描述

注意:日期类型也是做项目过程中,经常使用的类型信息,尤其是TIMESTAMP(时间戳)和DATETIME(YYYY-MM-DD hh:mm:ss)两个类型,但是注意TIMESTAMP会自动更新时间,非常适合那些需要记录最新更新时间的场景,而DATETIME需要手动更新

createTime   datetime   default CURRENT_TIMESTAMP not null comment '创建时间',
updateTime   datetime   default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',

面试考点:DATETIME 和 TIMESTAMP 的区别是什么?

DATETIME 类型没有时区信息,TIMESTAMP 和时区有关

TIMESTAMP 只需要使用 4 个字节的存储空间,但是 DATETIME 需要耗费 8 个字节的存储空间。但是,这样同样造成了一个问题,TIMESTAMP 表示的时间范围更小

  • DATETIME:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
  • TIMESTAMP:1970-01-01 00:00:01 ~ 2037-12-31 23:59:59

ENUM和SET

这两个类型,都是限制该类型只能取固定的值,但是枚举字段只能取一个唯一的值,而集合字段可以取任意个数的值

MySQL运算符

算数运算符

在这里插入图片描述

逻辑运算符

在这里插入图片描述

比较运算符

在这里插入图片描述

MySQL常用函数

字符串函数

函数说明
LEFT()RIGHT()左边或者右边的字符
LOWER()UPPER()转换为小写或者大写
LTRIM()RTRIM()去除左边或者右边的空格
LENGTH()长度,以字节为单位
SOUNDEX()转换为语音值

数值函数

函数说明
SIN()正弦
COS()余弦
TAN()正切
ABS()绝对值
SQRT()平方根
MOD()余数
EXP()指数
PI()圆周率
RAND()随机数

时间和日期函数

函数说明
NOW()返回当前的日期和时间
UNIX_TIMESTAMP(data)返回日期date的UNIX时间戳
CURRENT_TIMESTAMP()当前时间
CURDATE()当前日期
CURTIME()当前时间
DATA_FORMAT(data, “%yyyy-%mm-%dd”)格式化日期时间等

聚合函数

  • COUNT()、SUM()、AVG()、MAX()、MIN()

MySQL完整性约束

  • 主键约束:PRIMARY KEY
  • 自增键约束:AUTO_INCREMENT
  • 唯一键约束:UNIQUE
  • 非空约束:NOT NULL
  • 默认值约束:DEFAULT
  • 外键约束:FOREIGN KEY
CREATE TABLE user (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) UNIQUE NOT NULL,age TINYINT UNSIGNED NOT NULL DEFAULT 18,sex ENUM('M', 'W')
);

范式

面试考点:范式的好处?

  • 减少数据冗余(主要好处)
  • 消除异常(插入异常、更新异常、删除异常)
  • 让数据组织变得更加和谐

注意:但是数据库范式不是越高越好,范式越高,意味着表越多,多表联合查询的机率就越大,SQL的效率就越低

第一范式(1NF)

每一列保持原子特性

列都是基本数据项,不能够再进行分割,否则设计成一对多的实体关系。

例如表中的地址字段AddressID,可以再细分为省、市、区等不可再分割的字段

在这里插入图片描述

注意:不符合第一范式的不能够称作关系型数据库

第二范式(2NF)

属性完全依赖于主键——主要针对联合主键

非主属性需要完全依赖于主关键字,如果不是完全依赖主键,需要拆分为新的实体,设计成一对多的实体关系。

例如选课关系表为SelectCourse(学号、姓名、年龄、课程名称、成绩、学分),而(学号、课程名称)是联合主键,但是学分字段只和课程名称有关,和学号无关,相当于只依赖于联合主键的其中一个字段,不符合第二范式。

在这里插入图片描述

第三范式(3NF)

属性不依赖于其他非主属性

要求一个数据库表中不包含已经存在于其他表中包含的非主关键字信息

例如:学生关系表Student(学号、姓名、年龄、所在学院、学院地点、学院电话),学号是主键,但是学院电话只依赖于所在学院,并不依赖于主键学号,因此该设计不符合第三范式,应该把学院专门设计成一张表,学生表和学院表,两个是一对多的关系。
在这里插入图片描述

注意:一般关系型数据库只需要满足第三范式就可以了

BC范式(BCNF)

每个表中只有一个候选键

简单来说,BC范式是在第三范式的基础上的一种特殊情况,即每个表中都只有一个候选键(在一个数据库中每行的值都不相同,则可称为候选键),再上面第三范式的noNF表中可以看出,每一个员工的email都是唯一的(不可能两个人用同一个email),则该表不符合BC范式,对其进行BC范式化。

在这里插入图片描述

第四范式(4NF)

消除表中的多值依赖

简单来说,第四范式就是要消除表中的多值依赖,也就是说可以减少维护数据一致性的工作。比如图4中的noNF表中的skill技能这个字段,有的人是“java,mysql”,有的人描述的是“Java,MySQL”,这样数据就不一致了,解决办法就是将多值属性放入一个新表,所以满足第四范式的关系图如下:

在这里插入图片描述

总结:从上面对于数据库范式进行分解的过程中不难看出,应用的范式越多,表越多。而表多会带来很多问题:

  • 查询时需要连接多个表,增加了SQL查询的复杂度
  • 查询时需要连接多个表,降低了数据库查询性能

因此,并不是应用的范式越高越好,要视情况而定。第三范式已经很大程度上减少了数据冗余,并且基本预防了数据插入异常,更新异常,删除异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有关电力电子技术的一些相关仿真和分析:⑤交-直-交全桥逆变+全波整流结构电路(MATLAB/Siumlink仿真)

全桥逆变+全波整流结构 参数:Vin=500V, Vo=200V, T=2:1:1, RL=10Ω, fs=100kHz, L=1mH, C=100uF (1)给定输入电压,输出电压和主电路参数,仿真研究电路工作原理,分析工作时序; (2)调节负载电阻,实现电流连续和断续,并仿真验证; (3)调节占空比,分析占空比与电…

设计模式总结(设计模式的原则及分类)

1.什么是设计模式? 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结…

SpringBoot中动态注册Bean的方式

测试环境,本文源码 Java:8SpringBoot:2.5.14示例场景:动态注册ProxyServlet,间接实现类似于Nginx的反向代理功能 先理解如何实现动态注册 Bean 。 由于在 SpringBoot 中,先进行 Bean 的定义,…

企业全历史行为数据助ToB企业决策层开启营销的上帝视角

“上帝视角”是每个企业家都渴望拥有的。上帝视角的能力有多么吸引人呢?通常,一个企业家在技术、产品、营销中的任何一个领域拥有上帝视角的能力,就足可以让他的企业大杀四方,甚至创造历史。 在技术或产品领域,靠“上…

沙袋装袋机的原理和特点_鼎跃安全

在现代工业和建筑领域,沙子等散状物料的包装是一个必不可少的环节。传统的手工包装方式效率低下且劳动强度大,而沙袋装袋机的出现则极大地提高了包装效率和质量。 一、沙袋装袋机的工作原理 沙子通过输送系统从储料仓输送到装袋机的料斗中。输送系统设计…

Eureka——Spring Cloud中的服务注册与发现组件

目录 1. 前言2. Eureka的概述2.1 Eureka的核心功能2.2 Eureka的角色与特点2.3 Eureka的使用优势 3. 创建 Spring Cloud 的注册中心3.1 创建一个父项目3.2 创建Spring Cloud的注册中心Eureka 4. 创建服务提供者5. 创建一个消费者Consumer,调用服务提供者Provider 1. …

java链表常见简单面试算法题

头插法、尾插法 头插法:先待插入指向头结点的next,后头结点的next指向待插入。 尾插法:借助尾指针,直接插入 /*** 头插法* param head* return*/public static Node head_insert(Node head, int t){Node nodenew Node(t);node.set…

【Diffusion学习】【生成式AI】Stable Diffusion、DALL-E、Imagen 背後共同的套路

文章目录 图片生成Framework 需要3个组件:相关论文【Stable Diffusion,DALL-E,Imagen】 具体介绍三个组件1. Text encoder介绍【结论:文字的encoder重要,Diffusion的模型不是很重要!】评估指标:…

Webpack看这篇就够了

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

补充.IDEA的使用

首先我们要了解在idea中Java工程由项目(project)、模块(module)包(package)、类(class)组成。 他们之间的关系是project包含module包含package包含class。 所以我们要按照先建一个pr…

AutoMQ 社区双周精选第十二期(2024.06.29~2024.07.12)

本期概要 欢迎来到 AutoMQ 第十一期双周精选!在过去两周里,主干动态方面,AutoMQ 跟进了 Apache Kafka 3.4.x BUG 修复,并进行了CPU & GC 性能优化,另外,AutoBalancing 的 Reporter 和 Retriever 也将支…

Linux的相关命令

Linux 1. 什么是Linux系统 Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到Minix和Unix思想…

浏览器缓存:强缓存与协商缓存实现原理有哪些?

1、强缓存:设置缓存时间的,那么在这个时间内浏览器向服务器发送请求更新数据,但是服务器会让其从缓存中获取数据。 可参考:彻底弄懂强缓存与协商缓存 - 简书 2、协商缓存每次都会向浏览器询问,那么是怎么询问的呢&…

H2数据库启动时,设置非“全零监听”

全零监听 全零监听(即将监听地址设置为全零地址,如IPv4中的0.0.0.0或IPv6中的::)在网络服务配置中确实存在一定的安全风险。以下是全零监听可能带来的安全风险: 1. 暴露服务到不安全网络 全网段监听:将监听地址设置…

中介者模式(行为型)

目录 一、前言 二、中介者模式 三、总结 一、前言 中介者模式(Mediator Pattern)是一种行为型设计模式,又成为调停者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用,从而使其耦合…

JavaScript基础(十三)

Math对象 方法+说明 ceil() 对数进行上舍入 例:Math.ceil(12.5)返回13; Math.ceil(-12.5)返回-12 (简单点来记就是ceil返回的值要比传入的大) var…

CP Process2

CP Process2 信贷流程,概念,分类,五级十二类

docker镜像命令容器命令

docker镜像命令 1、docker images //查看所有本地的主机上的镜像 2、docker search mysql //搜素镜像 2、docker pull mysql:5.7 //指定版本拉取mysql镜像 3、docker pull mysql //不指定版本拉取mysql镜像 4、docker rmi -f 镜像id //删除指定镜像 5、4、docker rmi -f 镜像…

基于高德地图实现Android定位功能实现(二)

基于高德地图实现Android定位功能实现(二) 在实现的高德地图的基本显示后,我们需要不断完善地图的功能 地图界面设计(悬浮按钮等) 首先就是地图页面的布局,这个根据大家的实际需求进行设计即可&#xff…

前后端数据交互设计到的跨域问题

前后端分离项目的跨域问题及解决办法 一、跨域简述 1、问题描述 这里前端vue项目的端口号为9000,后端springboot项目的端口号为8080 2、什么是跨域 当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域 当前页面url被请求页面url是否…