9.1 数据库隔离级别有哪些,各自的含义是什么,MYSQL默认的隔离级别是是什么。
数据库的隔离级别是指多事务并发执行时导致的数据不一致问题,隔离级别包括:读未提交、读已提交、可重复读、串行化,MySQL默认隔离级别时可重复读。
- 读未提交:事务可读到其他事务未提交的数据变更,可能导致脏读
- 读已提交:事务只能读取已提交的数据,解决了脏读问题,但同一事务在不同时间点多次读取同一数据可能得到不同的结果,即不可重复读。
- 可重复读:一个事务在开始直到结束期间,对同一个数据的多次读取结果相同,即使其他事务在这期间对数据进行了修改和提交。但仍然存在幻读,即同一事务内两次执行同样的查询,会因其他事务插入新的行或删除已有行而返回不同的结果集。
- 串行化:最高的隔离级别,系统通过锁定机制确保任何事务都不能同时操作相同数据,保证数据的完整性和一致性,但也降低了系统的并发性能。
9.2 什么是幻读。
幻读是指同一事务两次执行相同查询,会因其他事务的插入新的行或删除已有行而返回不同的结果集。串行化通过锁机制保证任何事务都不能同时操作相同数据进而解决幻读问题。
9.3 MYSQL有哪些存储引擎,各自优缺点。
MySQL有Innodb、MYISAM、memory等存储引擎。
Innodb:
- 优点:支持事务,保证数据一致性;支持行级锁,减少锁冲突;提供外键约束,保证表间关联的完整性;通过MVCC支持高并发读写操作;自动崩溃恢复功能,确保数据安全性
- 缺点:相比MyISAM等其他引擎,需要额外的空间来存储事务和索引信息,空间占用相对较大;大量更新和插入操作时,写入密集型场景下可能较慢;
MYISAM
- 优点:对全文索引有很好的支持;数据文件与索引文件分离,查询速度快,适合读取密集型应用;空间占用相对较小
- 缺点:不支持事务和行级锁定,只支持表级锁定;不支持崩溃恢复或高可用性解决方案;不支持外键约束
Memory
- 优点:将所有数据存储在内存中,查询速度快,适用于临时表或者小规模、频繁读写的表
- 缺点:当MySQL服务器关闭或发生故障时,所有数据都会丢失;存储容量受限于系统内存大小,且无法保存BLOB或TEXT类型的大字段;不适用于大表或数据量剧增情况
9.4 高并发下,如何做到安全的修改同一行数据。
确保安全地修改同一行数据需要借助于数据库事务的隔离级别、锁机制以及应用程序优化策略
- 合适的事务隔离级别:MySQL中选择可重复读或串行化隔离界别减少并发问题
- 乐观锁:乐观锁并不在修改数据时立即加锁,而是在更新时检查自上次读取以来数据是否有被其他事务修改过,例如通过版本号或者时间戳字段来判断
- 悲观锁:事务开始时对要修改数据进行加锁,直到事务结束释放锁。
9.5 乐观锁和悲观锁是什么,INNODB的标准行级锁有哪2种,解释其含义。
乐观锁与悲观锁是并发控制的两种策略。INNODB标准行级锁包含共享锁和排它锁
- 悲观锁认为事务执行过程中很可能发生并发冲突,因此,在读取数据时立即获取锁,并在整个事务操作期间保持锁定状态,直到事务结束释放锁。
- 乐观锁假定在同一时间内不会有很多事务同时修改同一条记录,所以通常不加锁,而是每个事务在读取数据时都假设自己可以成功提交,仅在提交事务前检查在此期间是否有其他事务修改了数据。
- 共享锁:当一个事务对某一行数据加上共享锁后,允许其他事务对该行加共享锁,但不允许加排他锁。共享锁主要用于查询操作,多个事务可以同时读取同一行数据,而不会相互阻塞。
- 排他锁:如果一个事务对某一行数据加了排他锁,则禁止任何其他事务再对此行加任何类型的锁(包括共享锁和排他锁);排他锁用于数据修改操作,如UPDATE、DELETE等,以防止其他事务在该事务完成之前对同一行进行读写操作,从而保证数据的一致性和完整性。
9.6 SQL优化的一般步骤是什么,怎么看执行计划,如何理解其中各个字段的含义。
9.7 数据库会死锁吗,举一个死锁的例子,mysql怎么解决死锁。
9.8 MYsql的索引原理,索引的类型有哪些,如何创建合理的索引,索引如何优化。
9.9 聚集索引和非聚集索引的区别。
9.10 select for update 是什么含义,会锁表还是锁行或是其他。
9.11 为什么要用Btree实现,它是怎么分裂的,什么时候分裂,为什么是平衡的。
9.12 数据库的ACID是什么。
9.13 某个表有近千万数据,CRUD比较慢,如何优化。
9.14 Mysql怎么优化table scan的。
9.15 如何写sql能够有效的使用到复合索引。
9.16 mysql中in 和exists 区别。
9.17 数据库自增主键可能的问题。
9.18 MVCC的含义,如何实现的。
9.19 你做过的项目里遇到分库分表了吗,怎么做的,有用到中间件么,比如sharding jdbc等,他们的原理知道么。
9.20 MYSQL的主从延迟怎么解决。