面试/笔试题集锦——数据库篇(MySQL)(持续更新中)

前言

最近加入了春招的行列中,有好多东西需要学习or复习,在这里将持续整理学习、笔试和面试碰到的一些问题,希望能在巩固知识、加深印象的同时,也给大家的招聘之路带来便利,如果大家遇到了其他的经典问题,但是这里没有收录,希望大家能够通过评论等方式发给我,我会尽快的整理到集锦中。最后希望大家都能如愿找到满意的工作。by CrazyOnes


什么是(数据库)事务?

事务就是一组原子性的SQL查询,或者说一个独立的工作单元。其特点是事务内的语句,要么全部执行成功,要么全部执行失败。其执行结果必须使数据库从一种一致性状态到另一种一致性状态。


事务的特性

事务具有ACID四大特性:
原子性(atomicity): 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作,要么全部提交成功,要么全部失败回滚,不可能只执行事务中的一部分。
一致性(consistency): 数据库总是从一个一致性状态转换到另一个一致性状态。
隔离性(isolation): 一个事务所做的修改在最终提交之前,对其他事务是不可见的。也即事务之间不能相互影响。
持久性(durability): 一旦事务提交,其所做的修改就会永久保存到数据库中。


事务并发所带来的问题

脏读(dirty read): 一个事务读取了另一个事务未提交的数据。
不可重复读(nonrepeatable read): 因为事务从开始到提交之前所做的任何修改对其他事务是不可见的,所以在一个事务中对相同的范围读取两次,结果可能是不同的,因为这些数据可以被其他事务修改
幻读(phantom read): 当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,这时同一范围内两次读取的结果不同。其与不可重复读的差别在后者是记录的修改,而前者则指的是记录的增加或减少。



事务的隔离级别

事务的隔离级别规定了一个事务中所做的修改,哪些在事务内和事务间是可兼得,哪些是不可见的。
共有以下四种隔离级别:
未提交读(Read Uncommited): 在这个级别中,事务中的修改,即使没有提交,对其他的事务也都是可见的,会引发脏读等全部的事务并发带来的问题。
提交读(Read Commited): 这是大多数数据库默认的隔离级别(但MySQL不是)。提交读就是一个事务从开始到提交之前,所做的任何修改对其他的事务都是不可见的。这也真正满足了前边所提到的隔离性的定义。但仍然无法避免不可重复读和幻读的问题。
可重复读(Repeatable Read): 在事务开始后,其他事务对数据库的修改都是不可见的,直到本事务提交或回滚。该级别保证了同一个事务中多次读取同样的记录结果是一致的,也就解决了不可重复读的问题;但是对于范围读取还是无法解决幻读问题。
可串行化(Serializable): 最高的事务隔离级别。强制所有的事务都以串行的方式执行。会在每一行数据上都加锁,虽然解决了幻读等的所有问题,但是事务的执行速度也最慢。

上边四种隔离级别中,从上到下的隔离级别逐渐增高,但是事务执行的速度也逐渐变慢。隔离级别与带来的问题关系如下:

隔离级别脏读可能性不可重复读可能性幻读可能性加锁读
未提交读
提交读
可重复读
可串行化



数据库的索引类型

  1. BTREE
  2. 哈希索引
  3. 空间数据索引
  4. 全文索引
  5. 其他索引类型:分型树索引、聚簇索引你、覆盖索引等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值