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

news2024/9/23 9:31:19

文章目录

  • 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.coloradmin.cn/o/1929950.html

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

相关文章

<数据集>钢铁缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:1800张 标注数量(xml文件个数):1800 标注数量(txt文件个数):1800 标注类别数:6 标注类别名称:[crazing, patches, inclusion, pitted_surface, rolled-in_scale, scr…

【C语言】详解结构体(上)

文章目录 前言1. 结构体类型的含义2.结构体的声明2.1 结构体声明的语法2.2 结构体变量的创建和初始化 3.结构体的特殊声明4. 结构体的自引用5.小结 前言 C语言的数据类型分为内置数据类型和自定义的数据类型。所谓的内置的数据类型可以认为是C语言自带的数据类型(c…

three完全开源扩展案例03-模型加载

https://www.threelab.cn/three-cesium-examples/public/index.html#/codeMirror?navigationThree.js%E6%A1%88%E4%BE%8B[r166]&classifybasic&idmodelLoad 更多内容:https://threelab.cn/ import * as THREE from three import { OrbitControls } from …

AI+折叠屏,荣耀的创新周期论

文|刘俊宏 编|王一粟 2024年,AI和折叠屏的演进路线,已经成为了手机行业的共识。 首先,手机市场的新增量已经被折叠屏所接管。据Counterpoint Research数据显示,中国2024年第一季度折叠屏手机销量同比增长…

最新Qt6的下载与成功安装详细介绍

引言 Qt6 是一款强大的跨平台应用程序开发框架,支持多种编程语言,最常用的是C。Qt6带来了许多改进和新功能,包括对C17的支持、增强的QML和UI技术、新的图形架构,以及构建系统方面的革新。本文将指导你如何在Windows平台上下载和安…

linux后门教程

linux后门教程 alias 用法 系统默认别名:alias 设置别名:alias lsls -laih 删除别名:unalias ls **加参数:**alias ls‘ls -laih;pwd’ 注意 系统启动默认加载的配置文件 /etc/profile 切换用户就会执行/etc/profile /etc/bash…

【JavaScript 算法】冒泡排序:简单有效的排序方法

🔥 个人主页:空白诗 文章目录 一、算法原理二、算法实现三、应用场景四、优化与扩展五、总结 冒泡排序(Bubble Sort)是一种基础的排序算法,通过重复地遍历要排序的数列,一次比较两个元素,如果它…

c语言题目之打印水仙花数

文章目录 一、题目二、思路三、代码实现 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目 二、思路 此题的关键在于只要知道判断一个数据是否为水仙花数的方式,问题就迎刃而解。假定给定一个数据data,具体检测方式如下&a…

HTML+CSS+JS井字棋(来自动下棋)

井字棋 自动下棋 玩家先下&#xff0c;计算机后下 源码在图片后面 点赞❤️收藏⭐️关注&#x1f60d; 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Tic Tac Toe Game</tit…

批量提取PDF指定区域内容到 Excel , 根据PDF文件第一行文字来自动重命名v1.3-附思路和代码实现

本次文章更新内容&#xff0c;图片以及扫描的PDF也可以支持批量提取指定区域内容了&#xff0c;主要是通过截图指定区域&#xff0c;然后使用OCR来识别该区域的文字来实现的&#xff0c;所以精度可能会有点不够&#xff0c;但是如果是数字的话&#xff0c;问题不大&#xff1b;…

【MobileNet】【模型学习】

MobileNet 模型学习 MobileNet v1 B站视频链接&#xff1a;https://www.bilibili.com/video/BV1i44y1x7hP/关键点&#xff1a; 将常规的卷积&#xff0c;替换成深度可分离卷积。具体为&#xff1a;逐层卷积、逐点卷积。使用 Relu6 替换原先的 Relu。防止在进行 int8 和 float…

LAST_INSERT_ID使用方法-(DM8达梦数据库)

LAST_INSERT_ID使用方法 - DM8达梦数据库 1 示例 11.1 创建表1.2 结果集 2 示例 22.1 创建表2.2 结果集 3 达梦数据库学习使用列表 1 示例 1 1.1 创建表 DROP TABLE AT240715; CREATE TABLE "SYSDBA"."AT240715" ( "ID" INT PRIMARY KEY AUTO_…

leetcode 周赛(406)全AC留念

纪念第一次 leetcode 周赛&#xff08;406&#xff09;全AC 1.(100352. 交换后字典序最小的字符串) 题目描述&#xff1a; 给你一个仅由数字组成的字符串 s&#xff0c;在最多交换一次 相邻 且具有相同 奇偶性 的数字后&#xff0c;返回可以得到的 字典序最小的字符串 。 如…

基于mcu固件反汇编逆向入门示例-stm32c8t6平台

基于mcu固件反汇编逆向入门示例-stm32c8t6平台 本文目标&#xff1a;基于mcu固件反汇编逆向入门示例-stm32c8t6平台 按照本文的描述&#xff0c;应该可以在对应的硬件上通实验并举一反三。 先决条件&#xff1a;拥有C语言基础&#xff0c;集成的开发环境&#xff0c;比如&am…

卫星降雨量数据下载及生成栅格分布图(CMORPH)

一、 降雨 nc 数据下载 1. 登录网址&#xff08;截至到20240712仅有2024年1月的降雨量&#xff09;https://www.ncei.noaa.gov/products/climate-data-records/precipitation-cmorph 2. 选择对应时间分辨率 8km8km (30 min), 0.250.25 (hourly, daily)&#xff08;覆盖全球60…

ZStack Cloud 5.1.8正式发布

2024年7月5日&#xff0c;ZStack Cloud正式发布最新版本——ZStack Cloud 5.1.8&#xff0c;涵盖一系列重要功能&#xff0c;以下为您进行详细介绍。 亮点速览 GPU运维管理增强&#xff1a;新增GPU设备统一管理界面&#xff1b;支持GPU工作状态和实时负载监控报警三层网络运维…

校园工会体育报名小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;赛事公告管理&#xff0c;球员管理&#xff0c;球队信息管理&#xff0c;比赛信息&#xff0c;比赛报名管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;比赛信息&#xff0c;比赛报名&#…

Linux多线程编程-哲学家就餐问题详解与实现(C语言)

在哲学家就餐问题中&#xff0c;假设有五位哲学家围坐在圆桌前&#xff0c;每位哲学家需要进行思考和进餐两种活动。他们的思考不需要任何资源&#xff0c;但进餐需要使用两根筷子&#xff08;左右两侧各一根&#xff09;。筷子是共享资源&#xff0c;哲学家们在进行进餐时需要…

Linux 网络配置与连接

一、网络配置 1.1 ifconfig 网卡配置查询 ifconfig #查看所有启动的网络接口信息 ifconfig 指定的网卡 #查看指定网络接口信息 1.2 修改网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 #ens33网络配置文…

【ASTGCN】模型调试学习笔记--数据生成详解(超详细)

利用滑动窗口生成时间序列 原理图示&#xff1a; 以PEMS04数据集为例。 该数据集维度为&#xff1a;(16992,307,3)&#xff0c;16992表示时间序列的长度&#xff0c;307为探测器个数&#xff0c;即图的顶点个数&#xff0c;3为特征数&#xff0c;即流量&#xff0c;速度、平…