MySQL六十六问,两万字+五十图详解含(答案解析)
不知不觉,面渣逆袭系列已经肝了差不多十篇,每一篇都是上万字,几十图,基本上涵盖了面试的主要知识点,这期MySQL结束之后,这个系列可能会暂时告一段落,作为面渣逆袭系列第一阶段的收官之作,大家多多点赞收藏哦!
基础
作为SQL Boy,基础部分不会有人不会吧?面试也不怎么问,基础掌握不错的小伙伴可以跳过这一部分。当然,可能会现场写一些SQL语句,SQ语句可以通过牛客、LeetCode、LintCode之类的网站来练习。
1. 什么是内连接、外连接、交叉连接、笛卡尔积呢?
- 内连接(inner join):取得两张表中满足存在连接匹配关系的记录。
- 外连接(outer join):不只取得两张表中满足存在连接匹配关系的记录,还包括某张表(或两张表)中不满足匹配关系的记录。
- 交叉连接(cross join):显示两张表所有记录一一对应,没有匹配关系进行筛选,它是笛卡尔积在SQL中的实现,如果A表有m行,B表有n行,那么A和B交叉连接的结果就有m*n行。
- 笛卡尔积:是数学中的一个概念,例如集合A={a,b},集合B={1,2,3},那么A✖️B={<a,o>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>,}。
2. 那MySQL 的内连接、左连接、右连接有有什么区别?
MySQL的连接主要分为内连接和外连接,外连接常用的有左连接、右连接。
- inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集
- left join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。
- right join 在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。
3.说一下数据库的三大范式?
- 第一范式:数据表中的每一列(每个字段)都不可以再拆分。 例如用户表,用户地址还可以拆分成国家、省份、市,这样才是符合第一范式的。
- 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。 例如订单表里,存储了商品信息(商品价格、商品类型),那就需要把商品ID和订单ID作为联合主键,才满足第二范式。
- 第三范式:在满足第二范式的基础上,表中的非主键只依赖于主键,而不依赖于其他非主键。 例如订单表,就不能存储用户信息(姓名、地址)。
三大范式的作用是为了控制数据库的冗余,是对空间的节省,实际上,一般互联网公司的设计都是反范式的,通过冗余一些数据,避免跨表跨库,利用空间换时间,提高性能。
4.varchar与char的区别?
char:
- char表示定长字符串,长度是固定的;
- 如果插入数据的长度小于char的固定长度时,则用空格填充;
- 因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;
- 对于char来说,最多能存放的字符个数为255,和编码无关
varchar:
- varchar表示可变长字符串,长度是可变的;
- 插入的数据是多长,就按照多长来存储;
- varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法;
- 对于varchar来说,最多能存放的字符个数为65532
日常的设计,对于长度相对固定的字符串,可以使用char,对于长度不确定的,使用varchar更合适一些。
5.blob和text有什么区别?
- blob用于存储二进制数据,而text用于存储大字符串。
- blob没有字符集,text有一个字符集,并且根据字符集的校对规则对值进行排序和比较
6.DATETIME和TIMESTAMP的异同?
相同点:
- 两个数据类型存储时间的表现格式一致。均为
YYYY-MM-DD HH:MM:SS
- 两个数据类型都包含「日期」和「时间」部分。
- 两个数据类型都可以存储微秒的小数秒(秒后6位小数秒)
区别:
- 日期范围:DATETIME 的日期范围是
1000-01-01 00:00:00.000000
到9999-12-31 23:59:59.999999
;TIMESTAMP 的时间范围是1970-01-01 00:00:01.000000
UTC到 ``2038-01-09 03:14:07.999999
UTC - 存储空间:DATETIME 的存储空间为 8 字节;TIMESTAMP 的存储空间为 4 字节
- 时区相关:DATETIME 存储时间与时区无关;TIMESTAMP 存储时间与时区有关,显示的值也依赖于时区
- 默认值:DATETIME 的默认值为 null;TIMESTAMP 的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP)
7.MySQL中 in 和 exists 的区别?
MySQL中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。我们可能认为exists比in语句的效率要高,这种说法其实是不准确的,要区分情景:
- 如果查询的两个表大小相当,那么用in和exists差别不大。
- 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。
- not in 和not exists:如果查询语句使用了not in,那么内外表都进行全表扫描,没有用到索引;而not extsts的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。
8.MySQL里记录货币用什么字段类型比较好?
货币在数据库中MySQL常用Decimal和Numric类型表示,这两种类型被MySQL实现为同样的类型。他们被用于保存与货币有关的数据。
例如salary DECIMAL(9,2),9(precision)代表将被用于存储值的总的小数位数,而2(scale)代表将被用于存储小数点后的位数。存储在salary列中的值的范围是从-9999999.99到9999999.99。
DECIMAL和NUMERIC值作为字符串存储,而不是作为二进制浮点数,以便保存那些值的小数精度。
之所以不使用float或者double的原因:因为float和double是以二进制存储的,所以有一定的误差。
9.MySQL怎么存储emoji
MySQL六十六问,两万字+五十图详解含(答案解析)相关推荐
- 面渣逆袭:MySQL六十六问,两万字+五十图详解
大家好,我是三鸽,这期继续更新面渣逆袭系列,主角是MySQL. 不知不觉,面渣逆袭系列已经肝了差不多十篇,每一篇都是上万字,几十图,基本上涵盖了面试的主要知识点,这期MySQL结束之后,这个系列可能会 ...
- 面渣逆袭:MySQL六十六问,两万字+五十图详解!
不知不觉,面渣逆袭系列已经肝了差不多十篇,每一篇都是上万字,几十图,基本上涵盖了面试的主要知识点,这期MySQL结束之后,这个系列可能会暂时告一段落,作为面渣逆袭系列第一阶段的收官之作,大家多多点赞收 ...
- 面霸篇:MySQL六十六问,两万字+五十图详解!
基础 作为SQL Boy,基础部分不会有人不会吧?面试也不怎么问,基础掌握不错的小伙伴可以跳过这一部分.当然,可能会现场写一些SQL语句,SQ语句可以通过牛客.LeetCode.LintCode之类的 ...
- 两万文字多图详解常用软件工具使用(持续更新)
文章目录 1. 写在前面的话 2. 实用工具 2.1 Chrome 2.1.1 屏蔽百度的个性推荐页 2.1.2 Chrome双开 2.1.3 视频加速 2.1.4 设置代理模式 2.1.5 将UA设 ...
- [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- SAP UI5 初学者教程之二十六 - OData 服务配合 Mock 服务器的使用步骤详解试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...
- 万字长文的Redis五种数据结构详解(理论+实战),建议收藏。
本文脑图 前言 Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库.缓存.消息中间件,这么优秀的东西一定要一点一点的吃透它. 关于Redis的文章之前也写过三篇,阅读量和读者的反映都还 ...
- 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记
一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...
- 一万五千字详解HTTP协议
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 本篇文章篇幅比较长,先来个思维导图预览一下. 一.概述 1.计算机网络体系结构分层 2.TCP/I ...
最新文章
- selenium+Python(鼠标和键盘事件)
- escape mysql_MySQL中ESCAPE关键字的用法详解
- ckeditor深入挖掘吃透
- 阐述Linux动态库的显式调用
- 试题 历届试题 买不到的数目(dp/数学)
- paip.C#.NET JSON解析总结
- Python 多版本共存问题
- 删除 java代码中所有的注释
- ASP 读取Word文档内容简单示例
- Autodesk HSMWorks Ultimate 2019 Crack 破解版
- matlab隐函数参数拟合,matlab拟合隐函数参数(1stOpt拟合7参数请求代跑)
- elpida颗粒_内存涨价三星背锅,晶圆颗粒远远不止这几家!
- 虚拟内存设置在其他盘引发的问题(待解决)
- c语言降序字母,怎么实现对数组的降序排序
- python对excel进行读写操作
- elementUI的input使用扫描枪,回显值后重新刷新页面
- 阿里云学生成长计划资格考试分享
- 没有windows安装光盘怎么修复计算机,电脑没有u盘光盘重装windows7系统的方法步骤教程 - 系统家园...
- 疫情放开,新冠防治药推荐,中医治疫病的准则
- OA厂商的硬实力—技术水平
热门文章
- 阿里云大学推出云学院中小企业学习优惠方案,加速提升企业云时代人才竞争力
- 10倍于以往的传输速度带宽,Bluetooth(蓝牙)4.2标准发布
- 51单片机串口通信模板_51单片机串口通信(字符串接收和发送)(示例代码)
- 阿里分众强强联手威力不容小觑 但腾讯京东也不是毫无招架之力
- 大年初一微信闪退?看看如何修复的 1
- timestamp(时间戳)详解
- mysql timestamp 默认_MySQL数据库TIMESTAMP怎么设置默认值 | 学步园
- 【二维码】二维码生成
- 2022-2028年全球与中国低速电动汽车行业发展趋势及投资战略分析
- 腾讯云购买服务器和域名后要怎么配置访问
大家好,我是三鸽,这期继续更新面渣逆袭系列,主角是MySQL. 不知不觉,面渣逆袭系列已经肝了差不多十篇,每一篇都是上万字,几十图,基本上涵盖了面试的主要知识点,这期MySQL结束之后,这个系列可能会 ...
不知不觉,面渣逆袭系列已经肝了差不多十篇,每一篇都是上万字,几十图,基本上涵盖了面试的主要知识点,这期MySQL结束之后,这个系列可能会暂时告一段落,作为面渣逆袭系列第一阶段的收官之作,大家多多点赞收 ...
基础 作为SQL Boy,基础部分不会有人不会吧?面试也不怎么问,基础掌握不错的小伙伴可以跳过这一部分.当然,可能会现场写一些SQL语句,SQ语句可以通过牛客.LeetCode.LintCode之类的 ...
文章目录 1. 写在前面的话 2. 实用工具 2.1 Chrome 2.1.1 屏蔽百度的个性推荐页 2.1.2 Chrome双开 2.1.3 视频加速 2.1.4 设置代理模式 2.1.5 将UA设 ...
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...
本文脑图 前言 Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库.缓存.消息中间件,这么优秀的东西一定要一点一点的吃透它. 关于Redis的文章之前也写过三篇,阅读量和读者的反映都还 ...
一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...
点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 本篇文章篇幅比较长,先来个思维导图预览一下. 一.概述 1.计算机网络体系结构分层 2.TCP/I ...