MySQL作为目前使用比较广泛的数据库之一,是要求对于后端开发人员、架构师、运维人员、DBA等都需要掌握的数据库。是在面试中几乎一定会被问到的内容。下面我们就来看一下在MySQL面试中会被经常问到的一些问题汇总
范式,是指创建数据库表的规则,用来指导在系统设计阶段如何去设计自己的数据库表。使用数据库范式可以有效的减少数据的冗余,并且在后期开发编码的过程中可以减少编码的工作量。数据库主要的设计范式有三大范式
在使用MySQL数据库的时候,使用最多的就是查询语句,能够熟练的掌握SQL语句的编写是对开发人员最基本的要求。
SQL语句在编写的时候不同于其他的编程语言,其最明显的特征就是必须按照一定的顺序才能正常的执行。下面我们就给出SQL语句的基本执行顺序
select distinct 查询字段
from table名
JOIN table名
ON 连接条件
where 查询条件
group by 分组字段
having 分组之后的条件
order by 排序条件
limit 起始位置, 查询条数
MySQL读取顺序
from 表名
on 连接条件
join 表名
where 查询条件
group by 分组字段
having 分组之后的条件
select distinct 查询字段
order by 排序条件
limit 查询起始位置,查询条数
整体的执行过程
内连接,用于整合多张表的数据,获取相关关系或者是在相关关系下的公共部分的查询结果。
笛卡尔积,关于笛卡尔积简单来说就是排列组合,将两张表的记录,放在一起进行排列组合所有的情况。如下所示,
现在,我们有两个集合A和B。
A = {0,1} B = {2,3,4}
集合 A B 和 B A的结果集就可以分别表示为以下这种形式:
A B = {(0,2),(1,2),(0,3),(1,3),(0,4),(1,4)};
B A = {(2,0),(2,1),(3,0),(3,1),(4,0),(4,1)};
select 列名 from 左表,右表
从这里我们可以看到,结果并不是我们想要的,那么我们如何来消除笛卡尔积带来的影响呢?这个时候就需要通过内连接来进行处理。
内连接分为隐式连接和显式连接两种
隐式连接
select 列名 from 左表,右表 where 左表.id = 右表.id
显式连接
使用 INNER JOIN ... ON 语句,可以省略 INNER
select 列名 from 左表 inner join 右表 on 左表.id = 右表.id
注意,这里显式内连接与隐式内连接的结果是一样的。
外连接:分为两种一种是做左外连接,一种是右外连接
左外连接
select * from 左表 left join 右表 on 左表.id = 右表.id;
右外连接
select * from 左表 right join 右表 on 左表.id = 右表.id;
查询左表独有数据
select 列名 from 左表 left join 右表 on 左表.id=右表.id where 右表.id is null
查询右表独有数据
select 列名 from 左表 right join 右表 on 左表.id = 右表.id where 左表.id is null
全连接查询
select 列名 from 左表 full outter join 右表 on 左表.id = 右表.id ;
注意:MySQL中不支持这种写法,在Oracle中支持该写法,在MySQL中可以采用 UNION的方式进行查询。
查询左右表中单独的数据
select 列名 from 左表 full outter join 右表 on 左表.id = 右表.id where 左表.id = null or 右表.id = null
在修改或者是删除数据的时候,同时更新到其他表中的外键值,这种操作被称为几辆车操作。当主键发生更新的时候,作为其他表的外键也会更新,当主键数据发生删除的时候其他表的外键数据也会被同步删除。
可以通过如下的方式进行级联操作
添加外键约束,并且增加级联更新与级联删除
constraint 外键名 FOREIGN KEY (列名) REFERENCES 表名(列名) ON UPDATE CASCADE ON DELETE CASCADE
页面更新:2024-05-12
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号