数据库常见面试题(一)

数据库常见面试题

什么是事务:

  • 数据库事务是指作为单个逻辑工作单元执行的一系列操作(sql语句),这些操作要么全部执行,要么全部不执行。

事务的四大特性

  1. 原子性:
    • 事务中的所有操作是不可再分割的原子单位,要么执行,要么不执行
    • 一个事务中的操作,要么全部成功,要么全部失败
    • 如果全部失败,就回滚到事务开始前的状态
  2. 隔离性:
    • 一个事务执行的过程中,不应该受到其它事务的干扰
    • 当多个用户并发的访问数据库中时,如果操作同一张表,数据库则为每一个用户都开启一个事务,且事务之间互不干扰,也就是说事务之间的并发是隔离的
    • 举个例子,现有两个并发的事务T1,T2,T1要么在T2开始前执行,要么在T2结束后执行,如果T1先执行,那T2就在T1结束后再执行
  3. 一致性
    • 事务的执行的前后数据的完整性保持一致
    • 事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态
    • 拿转账举例子,A账户和B账户相互转账,无论如何操作,A,B账户的总金额必须是不变的。
    • 同步更新
  4. 持久性:
    • 一旦事务提交,对数据的改变是永久的,持久到数据库中
    • 即使断电或宕机情况下,也不会丢失提交事务的操作。

数据库的隔离级别

  • 多个事务读可能会导致以下问题
    • 脏读:事务B读取事务A还没有提交的数据
    • 不可重复度:是指在数据库的访问中,一个事务范围内两个相同的查询返回了不同数据。这是由于在查询过程中,数据被另外一个事务修改并提交了。
    • 幻读:当在事务处理过程中执行两个相同的查询,并且第二个查询返回的行集合与第一个查询不同。这两个区别在于,不可重复读重点在一行,幻读的重点是返回的集合不一样。幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
隔离级别脏读不可重复度幻读
READ UNCOMMITTED(读未提交)可能可能可能
READ COMMITTED(读已提交)不可能可能可能
REPEATABLE READ(可重复读)不可能不可能可能
SERIALIZABLE(串行化)不可能不可能不可能

Mysql的两种存储引擎的区别(事务,锁级别等等),各自适用的场景

引擎特性
MYISAM不支持外键,表锁。插入数据时,锁定整个表,查表总行数时,不需要全表扫描
InnoDB支持外键,行锁,查表总数时,全表扫描

InnoDB:

  • 支持行级锁,行级锁可以最大程度的支持并发,行级锁是由存储引擎层实现的。

  • InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何基于磁盘的关系数据库引擎所不能匹敌的。

  • InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)

  • InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按照主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以次作为主键。

  • InnoDB中不保存表的行数(eg:select count(*)from table时,InnoDB需要扫描一遍整个表来计算有多少行);清空整个表时,InnoDB是一行一行的删除,效率非常慢;

索引有B+索引和hash索引

索引区别
Hashhash索引,等值查询效率高,不能排序,不能进行范围查询
B+数据有序,范围查询

聚集索引和非聚集索引

索引区别
聚集索引数据按索引顺序存储,中子结点存储真实的物理数据
非聚集索引存储指向真正数据行的指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独一无二的VV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值