MySql面试题

1.InnoDB&&MyISAM

1.1. InnoDB

  • 支持事务,支持行级锁
  • 走聚簇索引(叶子节点存数据,数据存储与索引放到了一块)
  • 强制要求主键
  • 支持外键关联

1.2. MyISAM

  • 不支持事务,不支持行级锁
  • 是非聚簇索引(叶子节点存指针)
  • 不支持外键约束

2.隔离级别

  1. 读未提交

  2. 读已提交(不可重复读)
    现象: 一个事务A中2次读取一条记录,记录不一致(被其他事务修改)

  3. 可重复度
    实现:mvcc机制(多版本并发控制):
    innodb存储引擎,会在每行数据的最后加两个隐藏列,一个保存行的创建时间,一个保存行的删除时间,但是这儿存放的不是时间,而是事务id,事务id是mysql自己维护的自增的,全局唯一。

    在一个事务内查询的时候,mysql只会查询创建 当前事务id>=创建事务id ,当前事务id < 删除事务id

    某个事务执行期间,别的事务更新了一条数据:其实是在innodb中插入了一行记录,然后将新插入的记录的创建时间设置为新的事务的id,同时将这条记录之前的那个版本的删除时间设置为新的事务的id

  4. 串行化(解决幻读)
    幻读:一个事务内多次读取,记录数不一样;不可重复读和可重复读都是针对两个事务同时对某条数据在修改,但是幻读针对的是插入。
    幻读会带来的问题:事务A要插入一条数据,先查询一下有没有相同的数据,但是这时事务B添加了这条数据,这就会导致事务A插入失败,并且它就算在自己事务内再一次查询,也无法查询到与其插入相冲突的数据,同时自身死活都插入不了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值