MySQL数据库相关问题

1.MySQL数据库相关问题

去年面试了几家互联网公司,几乎都会问我数据库的相关问题,这里我做个总结,
问得最多的是事务失效,索引失效,索引的分类。下面我详细描述一下。

2 事务失效场景

  1. 事务方法没有被public修饰,@Transactional注解只能作用于public修饰的方法上。
  2. 方法内部自己捕捉了异常,未把异常抛出去,(如果自己把异常处理了,AOP就无法获取方法抛出的异常,就无法回滚。)。
  3. 事务注解使用了notsupport,不支持事务; @Transactional(propagation = Propagation.NOT_SUPPORTED)
  4. 未被Spring管理,事务方法所在的类没有被加载为一个bean,那么事务自然就失效了。
  5. 方法使用final修饰或static修饰,如果事务方法使用final或static修饰,那么aop就无法在代理类中重写该方法,事务就不会生效。
  6. 同一类中方法调用,如果一个方法调用有事务的方法也会失效,如果此时要解决,可以注入调用类本身,再进行对象.方法调用。
  7. 未开启事务,如果是传统的spring,则需要手动开启事务,如果是springboot项目,则DataSourceTransactionManagerAutoConfiguration自动配置类帮我们开启了事务。
  8. 数据库引擎使用错误,使用了不支持事务的存储引擎。比如mysql中的MyISAM
  9. 多线程调用,事务方法类,开启了多线程调用方式;、
    10.事务所在的类,过早实例化,,就无法被AbstractAutoProxyCreator后置处理器增强。

3.索引失效

  1. 对于复合索引,不满足最左匹配原则。
  2. where后面字符没有引号 。
  3. like %百分号在左边。
  4. 索引列使用了函数,使用or关键字,使用not in,不等于。
  5. 使用了select*
  6. 使用is not null,not in和not exists

4 索引区别

1、主键索引:主键索引是一种特殊的唯一索引,不允许有空值
2、普通索引或者单列索引
3、多列索引(复合索引):复合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用复合索引时遵循最左前缀集合
4、唯一索引或者非唯一索引
5、空间索引:空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建

  1. 唯一索引和普通索引:(唯一索引不允许索引列出现相同的数据,普通索引可以。在索引检索时,普通索引在查找到满足条件的第一个记录还会查找下一个记录,对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。)
  2. 唯一索引和主键的区别;(主键是可以做为其它表的外键的,唯一索引却不行做其他表外键的。一个表只能有一个主键,但唯一索引可以却可以有多个。唯一索引列允许为空值,主键却不能为空。)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值