实习
MySQL
MySQL,一种广泛使用的关系型数据库管理系统。
索引结构
B树索引:B树是一种平衡多路查找树,所有节点的孩子个数的最大值称为B树的阶,通常用m表示。每个节点最多有m - 1个关键字,并且以升序排列。B树索引可以快速定位数据,减少磁盘I/O操作。
B+树索引:B+树是B树的一种变体,与B树的主要区别在于:所有数据记录都存储在叶子节点中,非叶子节点只存储键值和指针;叶子节点之间通过双向链表连接,方便范围查询。
哈希索引:哈希索引基于哈希表实现,通过对索引列进行哈希运算,将数据存储在哈希表中。哈希索引的查找速度非常快,适用于等值查询,但不支持范围查询。
ACID原理
原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部回滚,就像一个原子一样不可分割。这是通过日志来实现的,在事务执行前,会将操作记录在日志中,如果事务执行失败,可以根据日志进行回滚。
一致性(Consistency):事务执行前后,数据库的完整性约束没有被破坏。数据库通过各种约束(如主键约束、外键约束等)和事务的原子性来保证一致性。
隔离性(Isolation):多个事务并发执行时,相互之间不会产生干扰。MySQL通过锁机制和事务隔离级别来实现隔离性。
持久性(Durability):事务一旦提交,其对数据库的修改就会永久保存。这是通过将事务日志持久化到磁盘来实现的。
事务
事务的概念:事务是一组数据库操作的集合,这些操作要么全部成功执行,要么全部回滚,保证了数据库的一致性和完整性。
事务的操作:在MySQL中,可以使用START TRANSACTION或BEGIN语句开始一个事务,使用COMMIT语句提交事务,使用ROLLBACK语句回滚事务。
事务的隔离级别:MySQL支持四种事务隔离级别,分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别会影响事务的并发性能和数据的一致性。
锁机制
共享锁(Shared Lock):又称读锁,允许一个事务读取数据,但不允许其他事务修改数据。多个事务可以同时获取共享锁,实现并发读取。
排他锁(Exclusive Lock):又称写锁,只允许一个事务对数据进行修改,其他事务在该事务释放排他锁之前,无法获取任何锁。
行锁:行锁是对表中的某一行数据进行锁定,粒度最小,并发性能较好,但开销较大。
表锁:表锁是对整个表进行锁定,粒度最大,并发性能较差,但开销较小。
意向锁:意向锁是一种表级锁,用于表示事务对表中的行或页的锁状态。意向锁分为意向共享锁(IS)和意向排他锁(IX)。
日志
重做日志(Redo Log):用于记录事务对数据库的修改操作,在数据库发生故障时,可以通过重做日志将数据库恢复到故障前的状态。
回滚日志(Undo Log):用于记录事务对数据库的修改操作的逆操作,在事务回滚时,可以通过回滚日志将数据库恢复到事务开始前的状态。
二进制日志(Binary Log):用于记录数据库的所有更改操作,包括数据的插入、更新和删除等。二进制日志可以用于数据备份、恢复和主从复制等。
慢查询日志(Slow Query Log):用于记录执行时间超过指定阈值的查询语句,帮助开发人员找出性能瓶颈,优化查询语句。
