面试问题
待处理问题
- 唯一索引和普通索引的区别,索引类别(B+树索引、全文索引、哈希索引),索引的区别
- 为什么要用 B+tree 作为 MySql 索引的数据结构
- 聚集索引与非聚集索引的区别
- DDL、DML、DCL 分别指什么
- explain 命令
- 数据库的几大范式
- 说说分库与分表设计,分库与分表带来的分布式困境与对应之策
- 什么是自适应哈希索引(AHI)
- limit 20000 加载很慢怎么解决
- 常见的几种分布式 ID 的设计方案
基础部分
-
- 事务四大特性(ACID)
-
- 数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别
-
- MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景
-
- 数据库的优化(从sql语句优化和索引两个部分回答)
-
- 索引有B+索引和hash索引,各自的区别
-
- B+索引数据结构,和B树的区别
-
- 索引的分类(主键索引、唯一索引),最左前缀原则,哪些情况索引会失效
-
- 聚集索引和非聚集索引区别。
-
- 有哪些锁(乐观锁悲观锁),select时怎么加排它锁
-
- 关系型数据库和非关系型数据库区别
-
- 了解nosql
-
- 数据库三范式,根据某个场景设计数据表(可以通过手绘ER图)
-
- 数据库的主从复制
-
- 使用explain优化sql和索引
-
- long_query怎么解决
-
- 内连接、外连接、交叉连接、笛卡儿积等 深入
-
- MVCC机制
-
- 根据具体场景,说明版本控制机制
-
- 死锁怎么解决
-
- varchar和char的使用场景。
-
- mysql并发情况下怎么解决(通过事务、隔离级别、锁)
-
数据库中的事务是什么?
- 事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
优化MYSQL数据库的方法?
- 选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如'省份,性别',最好设置为ENUM
- 使用连接(JOIN)来代替子查询
- 使用联合(UNION)来代替手动创建的临时表
- 建立索引
varchar快速很多,但是浪费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。
优化数据库的方法。说说 SQL 优化之道
- 主机性能
- 内存使用性能
- 网络传输性能
- SQL语句执行性能
ACID规则
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
- 1、A (Atomicity) 原子性
- 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
- 比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
- 2、C (Consistency) 一致性
- 一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。 例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。
- 3、I (Isolation) 独立性
- 所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
- 比如现在有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。
- 4、D (Durability) 持久性
- 持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
Mysql存储引擎有哪些?有什么区别?
- innodb、myisam
- MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。
- InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。
varchar和char有什么区别
- char 长度是固定的,不管你存储的数据是多少他都会都固定的长度。而varchar则处可变长度但他要在总长度上加1字符,这个用来存储位置。
- char 固定长度,所以在处理速度上要比
1.数据库中的事务是什么?事务的隔离级别?脏读、幻读、不可重复读是什么意思?
- 数据库事务
- 将一组相关操作组合为一个要么全部成功要么全部失败的单元
- 具有ACID(原子性、一致性、隔离性和持久性)属性
- 原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚
- 一致性(Consistent):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须于一致性状态
- 隔离性(Isolation):隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所扰,多个并发事务之间要相互隔离。
- 持久性(Duration):持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
- 事物隔离级别
- Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
- Repeatable read (可重复读):可避免脏读、不可重复读的发生。
- Read committed (读已提交):可避免脏读的发生。
- Read uncommitted (读未提交):最低级别,任何情况都无法保证。
- 脏读、幻读、不可重复读
- 脏读:脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据
- 不可重复读:不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
- 幻读:是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。
- 备注:
- 不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。
- 幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)
- 当前事务的隔离级别:select @@tx_isolation;
2.优化数据库的方法。说说 SQL 优化之道
- 主机性能
- 内存使用性能
- 网络传输性能
- SQL语句执行性能