MYSQL八股文


Mysql的高可用方案
高可用意味着一台Mysql出现了问题那么就不能进行数据的访问!
1.Mysql高可用:进行分库分表,通过MyCat连接多个Mysql
2.MyCat也得高可用,Happroxy,连接多个MyCat
3.Haproxy也得高可用,通过keepalived辅助haproxy


主键和索引的区别
主键一定会创建一个索引,但是有唯一索引的列不一定是主键
主键不允许为空值,唯一索引列允许空值
一个表只能有一个主键,但是可以有多个唯一索引
主键可以被其他表引用为外键,唯一索引列不可以
主键是一种约束,而唯一索引是一种索引,是表的冗余数据结构,两者具有一个本质的区别

主键和候选键有什么区别
表格的每一行都由主键唯一标识,一个表只有一个主键。主键也是候选键。
按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用

char和varchar的区别
1.char列长度固定位创建表声明时的长度,长度是1-255  但是varchar的存储长度不是固定的
当char值被存储时,它们被用空格填充到特定长度,检索char值时需要删除尾随1空格

使用Mysql的索引需要注意的问题
避免在where字句当中使用!=或者<>操作符号或者OR 否则引擎放弃使用索引而是使用全表扫描  优化器也无法通过索引来确定将要命中的行数,
因此需要搜索该表的所有行
where字句避免对字段进行表达式操作/函数式操作 ->否则引擎放弃使用索引而是使用全表扫描
表字段为Null也是不可以使用索引,字段是字符串类型类型的,使用的是时候必须加引号,否则索引失败
like查询%不能在前,因为这样无法使用索引,如果需要模糊查询,可以使用全文索引
复合索引遵循最左前缀原则 


怎样避免死锁的出现
1.设置锁的超时时间 至少可以保证在最差的情况下可以退出程序,不止于一直等待死锁
2.设置按照同一顺序访问资源·,类似于串行执行
3.避免事务中的用户交叉
4.包吃事务简短并在一个批处理中
5.使用低隔离级别 使用绑定链接

请你谈谈悲观锁和乐观锁
首先我们谈谈悲观锁,正式点讲就是说数据库被外界修改时保持者保守态度,因此在整个数据修改过程中,将数据会一直锁着。
在悲观锁的加持下,为了保持事务的隔离性,就需要一致性锁定读。读取数据时给加锁,其他事务无法修改这些数据,修改删除数据
也要加锁,其他事务无法读取这些数据

而对于乐观锁,它的加锁机制比较宽松,悲观锁大多数情况下依靠的还是锁机制实现,以保证操作最大程度的独占性。但随之而来
的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。而乐观锁机制在一定程度上解决了这个问题
乐观锁大多数是基于数据版本记录机制实现。

什么时候不要使用索引?
经常增删改的列不要使用索引
有大量重复的列不建立索引
表记录太少不要建立索引

说说什么是MVCC
多版本并发控制就是MVCC


说说事务的隔离级别?? mysql的默认隔离级别是什么?
a:READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可
能会导致脏读|幻读|不可重复读。
b:READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是
幻读或不可重复读仍有可能发生。
c:REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身
事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
d:SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐
个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读
以及幻读。
MySQL InnDB存储引擎默认隔离界别是:可重复度 select @@tx_isolation命令进行查看
InnoDB存储引擎在分布式事务的情况下一般会用到d
InnoDB存储引擎在非分布式事务的情况下一般会用到c,这里与SQL标准不同的是c是使用了Next-keyLock
锁算法,因此可以避免幻读的发生,这与其他数据库是不同的,选用c可以完全保证事务的隔离性要求,即达到了
SQL标准的可串行化隔离级别。因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是a
但是InnoDB存储引擎默认使用c是不会有任何性能损失的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值