首页 > 数据库 >Java高频面试题---MySQL

Java高频面试题---MySQL

时间:2024-03-14 19:55:40浏览次数:28  
标签:面试题 join varchar 存储 --- InnoDB MyISAM MySQL Java

一、InnoDB和MyISAM有什么区别?

InnoDB和MyISAM是MySQL中比较常用的两个执行引擎,MySQL在5.5之前版本默认存储引擎是MyISAM,5.5之后版本默认是InnoDB,MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。

它们主要有以下区别:

1、InnoDB支持事务,MyISAM不支持。

2、InnoDB是聚集索引,MyISAM是非聚集索引。MyISAM是采用了一种索引和数据分离的存储方式,InnoDB的聚簇索引中索引和数据在一起

3、InnoDB支持外键,MyISAM不支持。

4、InnDB最小的锁粒度是行锁,MyISAM是表锁。

5、InnoDB不支持FULLTEXT类型的索引(5.6之前不支持全文索引)。

 

二、char和varchar的区别?

char和varchar都用于在数据库中存储字符串的数据类型。它们之间的主要区别在于存储空间的使用方式:

char是一种定长的数据类型,它的长度固定且存储时会字段在结尾添加空格来将字符串填满指定的长度。char的长度范围是0~255。

varchar是一种可变长度的数据类型,它只会存储实际的字符串内容,不会填充空格。因此,在存储短字符串时,varchar可以节省空间。varchar的长度范围是0~65535。

优缺点及适应场景

对于字段值经常改变的数据类型来说,char比varchar也更有优势,因为char的长度固定,不会产生碎片。

varchar的优点是变长的字符串类型,兼容性更好;但是同时也会带来一些问题,如使用varchar可能会产生内存碎片、varchar会额外需要1到2个字节存储长度信息、以及update语句可能会导致页分裂。

适用:存储产品描述(可变长度)、存储用户地址、存储用户名称

char的优点是定长的字符串类型,减少内存碎片,并且无需额外的磁盘空间去存储长度信息。但是它的缺点是会删除列末尾的空格信息。

适用:身份证号,订单号,国家编码等。

 

三、为什么大厂不建议使用多表join?

之所以不建议使用join查询,最主要的原因就是join的效率比较低。

MySQL是使用了嵌套循环的方式来实现关联查询的,就是要通过两层循环,用一张表做外循环,第二张表做内循环,外循环每一条记录跟内循环中的记录做比较,符合条件就输出。如果有两藏表的话,复杂度最高是 O(n^2),三张表则是 O(n^3) ,随着表越来越多,表中的数据量越多,join的效率就会呈指数级下降。

join

在MySQL中,可以使用join在两个或者多个表中进行联合查询,join有三种,分别是inner join、left join、right join。

inner join(内连接):获取两个表中字段匹配关系。

取两个表的交集部分

left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

取两个表的交集 + 左表中的数据

right join(右连接):与left join相反,获取右表所有记录,即使左表没有对应匹配的记录。

取两个表的交集 + 右表中的数据

 

四、说一说MySQL一条SQL语句的执行过程?

如:select * from users where age = '18' and name = 'jiege' ;

执行过程如下图:

① 使用连接器,通过客户端 / 服务器通信协议与MySQL建立连接。并查询是否有权限。

② MySQL 8.0之前检查是否有缓存,开启了 Query Cache 且命中完全相同的SQL语句,则将查询结果直接返回给客户端。

③ 由解析器进行语法分析和语义分析,并生成解析树。如查询是 select,表明是 users、条件是 age = '18'  and name = 'jiege' ,预处理器则会根据MySQL规则进一步检查解析树是否合法。比如检查要查询的数据表或数据列是否存在等。

④ 由优化器生成执行计划。根据索引看看是否可以优化。

⑤ 执行器来执行SQL语句,这里具体的执行会操作MySQL的存储引擎来执行SQL语句,根据存储引擎类型,得到查询结果。若开启了Query Cache ,则缓存,否则直接返回。

 

五、什么是数据库事务?

数据库事务是访问并可能操作各种数据项的一个数据库操作操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束直接执行的全部数据库操作组成。

事务应该具有4个属性:原子性,一致性,隔离性,持久性。称为 ACID。

① 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

② 一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。

③ 隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

④ 持久性:一个事务一旦提交,它对数据库的修改一个永久保存在数据库中。

 

标签:面试题,join,varchar,存储,---,InnoDB,MyISAM,MySQL,Java
From: https://www.cnblogs.com/hwjres/p/18050912

相关文章

  • PHP-CGI远程1代码执行漏洞(CVE-2012-1823)
    影响版本php<5.3.12orphp<5.4.2测试环境cdphp/cve-2012-1823docker-composeup-d访问http://your-ip:8080/index.php?-s即爆出源码,说明漏洞存在。发送如下数据包,可见Body中的代码已被执行:POST/index.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a......
  • CentOS7升级Java11
    文章目录升级步骤1.查看已安装的jdk:2.删除旧版jdk:3.安装java11-openjdk:总结升级步骤查看当前版本java-version1.查看已安装的jdk:yumlistinstalled|grepjava2.删除旧版jdk:yumremovejava-1.7.0-openjdk*yumremovejava-1.8.0-openjdk*3.安......
  • Java学习记录第十二天
    数组的使用普通的For循环publicclassArrayDemo3{  publicstaticvoidmain(String[]args){    int[]arrays={1,2,3,4,5};​    //打印全部的数组元素    for(inti=0;i<arrays.length;i++){      System.out......
  • CF436E - Cardboard Box 题解
    只讲贪心做法。一、反悔贪心考虑如何使选的星星总数多一。显然,有如下几种方式:选一个之前没选过的位置\(i\),答案加上\(a_i\)。选一个之前选过一次的位置\(i\),答案加上\(b_i-a_i\)。对于一个之前选过一次的位置\(i\),再找到一个没有选过的位置\(j\),反悔掉\(i\),并选......
  • 【面试题】手写call、apply、bind
    区别相同点:都可以改变函数的this指向第一个参数都是this要指向的对象,如果没有这个参数或参数为undefined或null,则默认指向全局window都可以利用后续参数传参不同点:call可以传入多个参数;apply需要传入一个参数对象(数组或类数组);bind可以分开传参,例如:constfoo=fn.bind(th......
  • Java基础面试题(6)
    76.静态方法和实例方法有何不同?静态方法和实例方法的区别主要体现在两个方面:        在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。        静......
  • 谁将主导未来AI市场?Claude3、Gemini、Sora与GPT-4的技术比拼
    【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认......
  • 五大模型大比拼:Claude3、Gemini、Sora、GPTs与GPT-4的优缺点分析
    【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认......
  • 面向对象设计的六大原则(SOLID原则)-——里氏替换原则
    里氏替换原则(LiskovSubstitutionPrinciple,LSP)是面向对象设计的基本原则之一,由BarbaraLiskov提出。它表明,如果程序中的对象使用的是基类型的话,那么无论它实际上使用的是哪一个子类的对象,程序的行为都不会发生改变。简单来说,子类型必须能够替换它们的基类型,而且替换后程序的行......
  • PyQT可视化开发-保姆级教程
    背景因为在公司中负责小工具的开发(数据处理文件生成等),不可避免的会使用到Python的窗体界面,最初都是手敲出来的,费时费力,后来在网上百度了一下,发现一款比较好用的工具-QTdesigner,使用鼠标拖拽就可以完成窗体的设计,方便好用。话不多说。现在就体验一下这个工具的强大之处吧。1.......