文章目录
- 1. 阐述MySQL中的死锁
- 2.MySQL中的索引
- 3.MySQL中InnoDB和MyISAM的区别?
- 4.介绍一下事务的四大特性?
- 5.并发事务引发的问题
- 6.事务的隔离级别
1. 阐述MySQL中的死锁
在MySQL中,死锁是指两个或多个事务相互持有对方所需的资源而无法继续执行的情况。
死锁在MySQL中可能发生的情况包括:
- 并发更新或删除: 多个事务同时尝试更新或删除数据库中的数据行。
- 持有并等待: 一个事务持有了一个资源的锁,并且等待另一个事务持有的资源的锁。
- 循环等待: 多个事务之间形成了循环等待对方持有的资源。
为了减少死锁的发生,可以采取以下措施:
- 尽量减少事务持有锁的时间: 将事务中的操作尽快完成,减少锁的持有时间。
- 按相同顺序获取锁: 如果事务需要获取多个资源的锁,尝试按照相同的顺序获取锁,可以减少死锁的概率。
- 合理设计事务逻辑: 避免在事务中频繁的更新或删除大量数据,尽量将事务拆分为小的操作单元。
2.MySQL中的索引
1. MySQL的索引、特点
2. B+Tree和B-Tree的区别
3. Hash索引
4. 索引的具体类型
5. 根据索引的存储形式可以分为?
6. 索引设计原则
- 针对于数据量较大,且查询比较频繁的表建立索引。
- 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索 引。
- 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高。
- 如果是字符串类型的字段,字段的长度较长,可以针对于字段的特点,建立前缀索引。
- 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间, 避免回表,提高查询效率。
- 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增 删改的效率。
- 如果索引列不能存储NULL值,请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含 NULL值时,它可以更好地确定哪个索引最有效地用于查询。
3.MySQL中InnoDB和MyISAM的区别?
- InnoDB引擎, 支持事务, 而MyISAM不支持。
- InnoDB引擎, 支持行锁和表锁, 而MyISAM仅支持表锁, 不支持行锁。
- InnoDB引擎, 支持外键, 而MyISAM是不支持的。
4.介绍一下事务的四大特性?
- 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
- 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立 环境下运行。
- 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。 上述就是事务的四大特性,简称ACID。
5.并发事务引发的问题
- 赃读:一个事务读到另外一个事务还没有提交的数据。
- 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
- 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据 已经存在,好像出现了 “幻影”。
6.事务的隔离级别
注意:事务隔离级别越高,数据越安全,但是性能越低。