admin管理员组文章数量:1579386
1.连接查询(必会)
1.左连接 (左外连接)以左表为基准进行查询,左表数据会全部显示出来,右表 如果和左表匹配 的数据则显示相应字段的数据,如果不匹配,则显示为 NULL; 2.右连接 (右外连接)以右表为基准进行查询,右表数据会全部显示出来,右表 如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为 NULL;2.聚合函数(必会)
1.聚合函数 2.分类 COUNT:统计行数量 SUM:获取单个列的合计值 AVG:获取某个列的平均值 MAX:获取列的最大值 MIN:获取列的最小值3.SQL关键字(必会)
1.分页 MySQL的分页关键词limit SELECT * FROM student3 LIMIT 2,6; 查询学生表中数据,从第三条开始显示,显示6条 2.分组 MySQL的分组关键字:group by SELECT sex, count(*) FROM student3 GROUP BY sex; 3. 去重 去重关键字:distinct select DISTINCT NAME FROM student3;4. SQL Select 语句完整的执行顺序: (必会)
查询中用到的关键词主要包含如下展示,并且他们的顺序依次为 form...on...left join...where...group by...avg()/sum()...having..select...order by...asc/desc...limit... from: 需要从哪个数据表检索数据 where: 过滤表中数据的条件 group by: 如何将上面过滤出的数据分组算结果 order by : 按照什么样的顺序来查看返回的数据5. 数据库三范式(必会)
第一范式:1NF 原子性,列或者字段不能再分,要求属性具有原子性,不可再分解; 第二范式:2NF 唯一性,一张表只说一件事,是对记录的惟一性约束,要求记录有惟一标识, 第三范式:3NF 直接性,数据不能存在传递关系,即每个属性都跟主键有直接关系,而不是间接关系。6. 存储引擎 (高薪常问) 1.MyISAM存储引擎
主要特点: MySQL5.5版本之前的默认存储引擎 支持表级锁(表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁); 不支持事务,外键。 适用场景:对事务的完整性没有要求,或以select、insert为主的应用基本都可以选用MYISAM。在Web、数据仓库中应用广泛。 特点: 1、不支持事务、外键 2、每个myisam在磁盘上存储为3个文件,文件名和表名相同,扩展名分别是 .frm -------存储表定义 .MYD --------MYData,存储数据 .MYI --------MYIndex,存储索引2.InnoDB存储引擎
主要特点: MySQL5.5版本之后的默认存储引擎; 支持事务; 支持行级锁(行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁); 支持聚集索引方式存储数据。7.数据库事务(必会)
1.事务特性
2.隔离级别
(1)读未提交(read Uncommited): 在该隔离级别,所有的事务都可以读取到别的事务中未提交的数据,会产生脏读问题,在项目中基本不怎么用, 安全性太差;(2) 读已提交(read commited): 这是大多数数据库默认的隔离级别,但是不是MySQL的默认隔离级别;这个隔离级别满足了简单的隔离要求:一个事务只能看见已经提交事务 所做的改变,所以会避免脏读问题;
由于一个事务可以看到别的事务已经提交的数据,于是随之而来产生了不可重复读和虚读等问题(下面详细介绍这种问题,结合问题来理解隔离级别的含义);
(3 ) 可重复读(Repeatable read): 这是MySQL的默认隔离级别,它确保了一个事务中多个实例在并发读取数据的时候会读取到一样的数据;不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
(4) 可串行化(serializable): 事物的最高级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争,一般为了提升程序的吞吐量不会采用这个;
8.索引
1. 索引的概念和优点(了解)
2. 索引的分类(必会)
(1) 普通索引:最基本的索引,它没有任何限制。 (2) 唯一索引:与普通索引类似,不同的就是索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。 (3) 主键索引:它是一种特殊的唯一索引,用于唯一标识数据表中的某一条记录,不允许有空值,一般用 primary key 来约束。 (4) 联合索引(又叫复合索引):多个字段上建立的索引,能够加速复合查询条件的检索。 (5) 全文索引:老版本 MySQL 自带的全文索引只能用于数据库引擎为 MyISAM 的数据表,新版本 MySQL 5.6 的 InnoDB 支持全文索引。默认 MySQL 不支持中文全文检索,可以通过扩展 MySQL,添加中文全文检索或为中文内容表提供一个对应的英文索引表的方式来支持中文。3. 索引的底层实现原理(高薪常问)
1. 索引结构 索引是在Mysql的存储引擎(InnoDB,MyISAM)层中实现的, 而不是在服务层实现的. 所以每种存储引擎的索引都不一定完全相同, 也不是所有的存储引擎都支持所有的索引类型的, Mysql目前提供了以下4种索引: B+Tree 索引: 最常见的索引类型, 大部分索引都支持B+树索引. Hash 索引: 只有Memory引擎支持, 使用场景简单. R-Tree索引(空间索引): 空间索引是MyISAM引擎的一个特殊索引类型, 主要地理空间数据, 使用也很少. S-Full-text(全文索引): 全文索引也是MyISAM的一个特殊索引类型, 主要用于全文索引, InnoDB从Mysql5.6版本开始支持全文索引. file:///C:\Users\谁动了~1\AppData\Local\Temp\ksohtml752\wps11.jpg 2. BTree结构 B+Tree是在BTree基础上进行演变的, 所以我们先来看看BTree, BTree又叫多路平衡搜索树, 一颗m叉BTree特性如下: (1) 树中每个节点最多包含m个孩子. (2) 除根节点与叶子节点外, 每个节点至少有[ceil(m/2)] 个孩子(ceil函数指向上取整). (3) 若根节点不是叶子节点, 则至少有两个孩子. (4) 每个非叶子节点由n个Key和n+1个指针组成, 其中 [ceil(m/2) -1 ] <= n <= m-1. 以5叉BTree为例, key的数量: 公式推导 [ceil(m/2) -1 ] <= n <= m-1. 所以 2 <= n <= 4, 中间节点分裂父节点,两边节点分裂.file:///C:\Users\谁动了~1\AppData\Local\Temp\ksohtml752\wps12.jpg 3.B+Tree 结构 B+Tree为BTree的变种, B+Tree与BTree的区别: 1.B+Tree的叶子节点保存所有的key信息, 依key大小顺序排列. 2.B+Tree叶子节点元素维护了一个单项链表. 所有的非叶子节点都可以看作是key的索引部分.
file:///C:\Users\谁动了~1\AppData\Local\Temp\ksohtml752\wps13.jpg
由于B+Tree只有叶子节点保存key信息, 查询任何key都要从root走的叶子. 所以B+Tree查询效率更稳定. Mysql中的B+Tree MySql索引数据结构对经典的B+Tree进行了优化, 在原B+Tree的基础上, 增加了一个指向相邻叶子节点的链表指针, 就形成了带有顺序指针的B+Tree, 提高区间访问的性能. MySql中的B+Tree索引结构示意图:
file:///C:\Users\谁动了~1\AppData\Local\Temp\ksohtml752\wps14.jpg
4. 如何避免索引失效(高薪常问)
(1) 范围查询, 右边的列不能使用索引, 否则右边的索引也会失效. 索引生效案例 [AppleScript] 纯文本查看 复制代码 ?1 |
select * from tb_seller where name = "小米科技" and status = "1" and address = "北京市" ;
|
1 |
select * from tb_seller where name = "小米科技" and status > = "1" and address = "北京市" ;
|
1 |
select * from tb_seller where substring ( name , 3 , 2 ) = "科技" ;
|
1 |
select * from tb_seller where substring ( name , 3 , 2 ) = "科技" ;
|
1 |
select * from tb_seller where name = "小米科技" and status = 1
|
1 |
select sellerid , name , status from tb_seller where name = "小米科技" and staus = "1" and address = "西安市" ;
|
1 |
select * from tb_seller where name = "小米科技" or createTiem = "2018-01-01 00:00:00" ;
|
版权声明:本文标题:java求职面试必会数据库知识 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727855144a1133934.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论