一条SQL查询语句是如何执行的?
- 连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接。
- 查询缓存: MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以key-value 对的形式,被直接缓存在内存中。
- 分析器:你输入的是由多个字符串和空格组成的一条SQL 语句,MySQL 需要识别出里面的字符串分别是什么,代表什么。
- 优化器:优化器是在表里面有多个索引的时候,决定使用哪个索引; 或者在一个语句有多表关联(join )的时候,决定各个表的连接顺序。
- 执行器: MySQL通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。
数据库的事务隔离级别有哪些?
- 读未提交(Read Uncommitted):
○ 允许一个事务读取另一个事务尚未提交的数据修改。
○ 最低的隔离级别,存在脏读、不可重复读和幻读的问题。 - 读已提交(Read Committed):
○ 一个事务只能读取已经提交的数据。其他事务的修改在该事务提交之后才可见。
○ 解决了脏读问题,但仍可能出现不可重复读和幻读。 - 可重复读(Repeatable Read):
○ 事务执行期间,多次读取同一数据会得到相同的结果,即在事务开始和结束之间,其他事务对数据的修改不可见。
○ 解决了不可重复读问题,但仍可能出现幻读。 - 序列化(Serializable):
○ 最高的隔离级别,确保事务之间的并发执行效果与串行执行的效果相同,即不会出现脏读、不可重复读和幻读。
事务的四大特性有哪些?
事务的四大特性通常被称为 ACID 特性
- 原子性:确保事务的所有操作要么全部执行成功,要么全部失败回滚,不存在部分成功的情况。
- 一致性:事务在执行前后,数据库从一个一致性状态转变到另一个一致性状态。
- 隔离性:多个事务并发执行时,每个事务都应该被隔离开来,一个事务的执行不应该影响其他事务的执行。
- 持久性:一旦事务被提交,它对数据库的改变就是永久性的,即使在系统故障或崩溃后也能够保持。
MySQL的执行引擎有哪些?
MySQL的执行引擎主要负责查询的执行和数据的存储, 其执行引擎主要有MyISAM、InnoDB、Memery 等。
● InnoDB引擎提供了对事务ACID的支持,还提供了行级锁和外键的约束,是目前MySQL的默认存储引擎,适用于需要事务和高并发的应用。
● MyISAM引擎是早期的默认存储引擎,支持全文索引,但是不支持事务,也不支持行级锁和外键约束,适用于快速读取且数据量不大的场景。
● Memery就是将数据放在内存中,访问速度快,但数据在数据库服务器重启后会丢失。