面试题—数据库

Mysql

主键不为空,且不可重复

Collate:utf8_bin(区分大小写)    uft8_general_ci(不区分大小写)

char 与 varchar 的区别:

        char : 定长,存储时,会补全长度,255字符,查询速度更快

        varchar : 变长,存储时不会补全长度,65532字节,一到三个字节记录大小,utf8:21844字符 gbk: 32766

存储引擎

innodb:支持事务

myisam:不支持事务

 事务

  • 四个特性
  1. 原子性:事务是最小执行单位,所有动作要么都执行,要么都不执行
  2. 隔离性:并发访问时,事务之间互不干扰
  3. 一致性:事务执行前后,数据保持一致性,多个事务对同一数据读取都是相同的
  4. 持久性:事务提交后,对数据库的改变是持久的,即使数据库发送故障也不影响
  • 并发问题
  1. 脏读(b 更新,a读, b回滚,a读脏)
  2. 不可重复读(a 多次读同一记录, 期间 b改此条记录,a 读不同)
  3. 幻读(a改,b加/减不同记录,a显示多一条记录)

索引

  • 从物理结构分:聚集索引(与表相对应行物理顺序一致),非聚集索引
  • 应用:普通索引,唯一索引,主键索引,组合索引,全文索引
  • 优缺点
  1. 创建索引提高性能
  2. 加快检索速度
  3. 加快表连接
  4. 创建唯一性索引,保证每行数据的一致性
  5. 通过索引,检索,可以使用优化隐藏器,提高系统性能
  6. 创建索引和维护索引需要耗费时间,索引需要占用物理空间(聚集索引占用更大)

三大范式

  1. 第一范式:字段是不可分割的最小单元
  2. 第二范式:1NF前提,存在一候选码,非主属性完全依赖此候选码
  3. 第三范式:2NF前提,非主属性互不依赖

连表操作

  • 内联:返回两个表满足连接条件的数据
  • 左外连接:返还左表的所有数据以及右表满足连接条件的数据
  • 右外连接:返还右表的所有数据以及左表满足连接条件的数据

视图

虚拟表,根据基表创建;基表与视图的改变会相互影响

Redis ( remote dictionary sever)

定义

     非关系数据库 Nosql key-values存储

  • 内存—>快
  • 数据结构简单,数据操作简单(每一种数据类型都有相对应的操作命令)—>快
  • 单线程

优点

  1. 内存—>读写速度快
  2. 支持数据持久化(AOF RDB)
  3. 支持主从复制
  4. 支持事务,redis所有操作都是有原子性的

数据类型

key:

  • 字符串 (string)

value:

  • 字符串(string)
  • 列表(list) 
  • 哈希(hash)
  • 集合(set)
  • 有序集合(zset)

事务

        保证了一致性,隔离性,不保证原子性,持久性

     操作:

  1. watch 监控一个或多个key
  2. unwatch 取消 所有 监控
  3. multi 事务开启
  4. discard 清空事务并请求放弃事务
  5. exec 执行所有事务命令

    有无原子性:

  • 有:事务中命令语法错误,所有命令不执行
  • 无:事务中命令逻辑错误,运行错误,其他命令仍然继续执行

持久化

两种同时开启,redis优先选择AOF恢复

     RDB(快照,默认)

  • 按设置key更新频率(60秒 100+个key),将缓存写到磁盘
  • 优点:数据集大时,效率比AOF高
  • 缺点:数据安全性低,更新频率低时,数据容易丢失

     AOF(日志)

  • always 每次数据变化都写入磁盘
  • everysec 每秒写一次
  • no 由系统决定何时写,linux默认30秒
  • 优点:数据安全性高
  • 缺点:文件大,恢复速度慢,启动效率低

缓存问题

  • 缓存雪崩:key短时间内大面积过期,导致大量请求都直接落到数据库,导致数据库崩溃
  • 缓存穿透:缓存 和 数据库都没有请求要的数据,大量请求都落到数据库,导致数据库崩溃
  • 缓存击穿:缓存 上没有请求要的数据,大量同一数据并发请求落到数据库上,导致数据库崩溃
  • 缓存预热:提前将部分数据写入缓存

主从复制

  1. 主实例更新后将数据,更新到从实例
  2. 一旦主机宕机,故障转移:选择一个从机当做主机,其他从机缓存全部清空,从新的主机将数据同步更新到其他从机
  3. 缓存内存不宜过大,障碍转移主机切换速度可以,但是从机更新速度非常慢,而且新主机一旦更新了数据,从机又需要重新开始更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值