MySQL终极版面试免死金牌

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,0>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>,}

2.MySQL中的内连接,外连接,左连接,右连接有什么区别?

 

  • inner join内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集

  • left join在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。

  • right join在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。

3.MySQL中三范式?

 

  • 第一范式:数据表中的每一列都不可在拆分,

  • 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。

  • 第三范式:在第二范式的基础上,表中的非主键只依赖于主键,而不依赖于其他非主键。

  • 在设计数据结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由,比如性能,事实上我们经常会为了性能而妥协数据库的设计。

4.MySQL中的日志

 

1.错误日志(error log):错误日志文件对MySQL的启动,运行,关闭过程进行了记录,能帮助定位MySQL问题

2.慢查询日志(slow query log):慢查询日志是用来记录执行时间超过long_query_time这个变量定义的时长的查询语句。通过慢查询日志,可以查找出那些查询语句执行效率很低,以便进行优化。

3.一般查询日志(general log):一般查询日志记录了所有对MySQL数据库请求的信息,无论请求是否正确执行。

4.二进制日志(bin log):关于二进制日志,他记录了数据库所有执行的DDL的DML语句(除了数据查询语句select,show等),以事件形式记录并保存在二进制文件中。

还有两个InnoDB存储引擎特有的日志文件:

1,重做日志(redo log):重做日志至关重要,因为他们记录了对于InnoDB存储引擎的事务日志。

2,回滚日志(undo log):回滚日志同样也是InnoDB引擎提供的日志,顾名思义,回滚日志的作用就是对数据进行回滚。当事务对数据库进行修改,InnDB引擎不仅会记录redo log,还会生成对应的undo log日志,如果事务执行失败或者调用了rollback,导致事务需要回滚,就可以利用undo log中的信息将数据回滚到修改之前的样子。

5.二进制日志(bin log)和重做日志(redo log)有什么区别

  • bin log会记录所有与数据有关的日志记录,包括InnoDB,MyISAM等储存引擎的日志,而redo log只记InnoDB储存引擎的日志。

  • 记录的内容不同,bin log 记录的是关于一个事务的具体操作内容,既该日志是逻辑日志。而redo log 记录的是关于每个页(Page)的更改的物理情况。

  • 写入的时间不同,bin log 尽在事务提交前进行提交,也就是只写磁盘一次。而在事务进行的过程中,缺不断有redo ertry 被写入redo log 中

  • 写入的方式也不同,redo log 是循环写入和擦除就,bin log 是追加写入吗,不会覆盖已经写的文件。

6.MVCC

MVCC多版本并发控制,通常来说就是MVCC通过保存数据的历史版本,根据版本号来处理是否显示,从而达到读取数据的时候不需要加锁就可以保证事务的隔离性效果,MySQL中的InnoDB就是使用这种方式来提高读写事务控制,大大提高了读写事务的并发性能,原因是MVCC时一种不采用锁来控制事务的方式,是一种非阻塞,同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但并不解决更新丢失问题。

7.乐观锁和悲观锁

1.悲观锁:在线程访问时对数据加锁,其他线程暂时无法访问,保证只有一个线程访问和修改数据,只有当线程访问结束并释放锁资源时,其他线程才能访问,

特点:每次只有一个线程可以访问,保证了数据的独占性和正确性,但是每次都需要加锁和释放锁,消耗性能,性能低

2.乐观锁:在访问数据时不会对数据进行加锁,允许多个线程访问,只有进行修改时才会校验数据的准确性,当大量请求访问时,由于不会加锁和解锁,所以性能高,但在高并发情况下,大量的请求会导致数据冲突而浪费资源。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值