MySQL面试常见题目(五)

原文地址:MySQL面试常见题目(五)

1、SQL约束有哪几种?

  1. NOT NULL:约束字段内容一定不能为NULL。

  2. UNIQUE:约束字段唯一性,一个表允许有多个UNIQUE。

  3. PRIMARY KEY:约束字段唯一,不可重复,一个表只能有一个。

  4. FOREIGN KEY:用于预防破坏表之间连接的动作,也能防止非法数据插入外键。

  5. CHECK:用于控制字段的值范围。

2、MySQL事务的特性?

  1. 原子性:事务作为一个整体被执行,包含在其中对数据库的操作要么全部被执行,要么都不执行。

  2. 一致性:事务开始前和结束后,数据都不会被破坏。

  3. 隔离性:多个事务同时并发访问时,事务之间是相互隔离的。

  4. 持久性:事务完成后,该事务对数据库所做的操作将永远保存在数据库之中。

3、事务ACID特性实现原理?

  1. 原子性:使用undo log实现,如事务执行出错或用户执行rollback,MySQL通过undo log日志返回事务开始的状态。

  2. 一致性:通过回滚及并发情况下的隔离性来实现。

  3. 隔离性:通过锁、MVCC使事务互相隔离开。

  4. 持久性:使用redo log实现,只有redo log实现,当系统崩溃后可通过redo log来恢复数据。

4、死锁怎么解决?

死锁指的是两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象,它有四个必要条件:互斥条件、请求和保持条件、环路等待条件、不剥夺条件,解决思路一般就是切断环路,尽量避免并发形成环路。

来看具体方案:

  1. 如不同程序会并发存取多个表,尽量约定以相同的顺序访问表,可降低死锁机会。

  2. 同一事务中,尽可能做到一次锁定所需所有资源,减少死锁发生概率。

  3. 对易产生死锁的业务,可尝试升级锁定颗粒度,通过表锁减少死锁发生概率。

  4. 如业务不好处理则用分布式事务锁或乐观锁。

  5. 合理优化索引可降低死锁发生概率。

5、drop、delete及turncate区别?

6、UNION及UNION ALL区别?

  1. UNION:对两结果集进行并集操作,不包括重复行,同时进行默认规则的排序。

  2. UNION ALL:对两结果集进行并集操作,包括重复行,不进行排序。

  3. UNION 效率高于UNION ALL。

7、列为NULL时,查询是否会用到索引?

列为NULL时也是会走索引的,但尽量避免,因为会增加搜索复杂度。

8、主键使用自增ID还是UUID?

单机选择自增ID,分布式的话,建议考虑UUID。

  1. 自增ID:数据存储空间小,查询效率高,如数据量过大,会超出自增长的值范围,多库合并,也会产生问题。

  2. UUID:适合大量数据插入更新,但它是无序的,插入操作效率低,占用空间大。

9、MySQL自增ID用完怎么办?

可考虑提前分库分表。

至此,本次分享就结束了,后期会慢慢补充的。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

  

Guess you like

Origin blog.csdn.net/luyaran/article/details/121201270