Sql在Mysql中的执行过程

0 阅读1分钟

image.png

  1. 实例如下, 先建一个表user, 再插入一些数据
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    age INT CHECK (age >= 0)
);

INSERT INTO user (name, age) VALUES 
('李四', 30),
('王五', 22),
('赵六', 28);

2. 查询语句

1.      select * from user WHERE name = '李四'and age =30
2.  客户端执行一条查询语句先经过连接器, 进行账号密码权限校验, 通过走查询缓存看执行是否执行过该语句(更新表会清空查询缓存),有则走缓存, 否则进入分析器
3.  分析进行词法校验拆解语句类型select和字段name和age, 语法校验语句是否有语法错误
4.  进入优化器, 先选择name = '李四' 再 比对age =30, 或者先 比对age =30再在剩余列中寻找name = '李四'的, 然后优化器会选择代价最小的执行计划
5.  执行器会根据执行计划调用存储引擎读接口读取数据

3. 更新语句

1.      UPDATE user
        SET name = '张三丰', age = 35
        WHERE id = 1;
2.  更新语句要先执行查询语句查找id =1的记录, 如上流程
3.  拿到查询记录, 变更name = '张三丰', age = 35, 调用存储引擎写入该数据