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