【Mysql】之事务详解
一、定义
事务就是一组数据库操作序列(包含一个或多个SQL操作命令),事务会把所有操作看作为一个不可分割的整体向数据库系统提交或撤消操作,事务的所有操作要么都执行,要么都不执行。
二、事务的 ACID 特性
2.1 原子性
事务管理的基础。负责把事务中的所有操作看作为一个不可分割的工作单元,要么都执行,要么都不执行。
2.2 一致性
事务管理的目的。负责保证事务开始前和事务结束后数据的完整和一致
2.3 隔离性
事务管理的手段。负责使多个事务并发操作同一个数据表时,每个事务都有自己独立的数据空间,事务的执行不受其它事务干扰。可以通过设置隔离级别来解决不同的一致性问题。
2.4 持久性
事务管理的结果。负责当事务被提交后,事务中的命令操作修改的结果会被持久化保存,且不会被回滚
三、隔离级别
未提交读 | read uncommitted | 允许 脏读、不可重复读、幻读 |
提交读 | read committed | 不允许 脏读,允许 不可重复读、幻读 |
可重复读 | repeatable read | 不允许 脏读、不可重复读、幻读(对InnoDB存储引擎不允许) |
串行读 | serializable | 都不允许,相当于锁表,每个事务完全隔离,但是会影响数据库的读写效率 |
set global transaction isolation level 隔离级别; #设置全局级的隔离级别,可在所有会话中有效,当前会话需要重新登录后生效
set session transaction isolation level 隔离级别; #设置会话级的隔离级别,仅在当前会话中立即生效
show global variables like '%isolation%'; #显示全局级隔离级别
show session variables like '%isolation%'; #显示会话级隔离级别
四、事务管理操作
begin; | 显示的开启一个事务 |
insert into ... | 插入 |
delete from .... | 删除 |
update X set | 更新 |
savepoint XX; | 在事务中创建回滚点 |
rollback to XX; | 在事务中回滚到指定的回滚点位置 |
commit; 或 rollback; | 提交或回滚事务 并结束事务 |
set session/global autocommit=1/0 | 设置开启/关闭自动提交事务 |
五、mysql的架构
5.1 组件
连接器、查询缓存(从8.0版本废弃)、解析器、优化器、执行器、存储引擎、文件系统
5.2 mysql查询数据的过程
1、客户端向mysql服务器发送查询请求,连接器负责处理连接,以及进行身份验证和权限控制
2、mysql先检查查询缓存(从8.0版本废弃)
3、使用解析器对SQL语句进行词法、语法解析,生成语法树交给优化器
4、优化器根据可用的索引、表的统计信息、查询条件等规则对语法树进行优化,生成最佳的执行计划交给执行器
5、执行器根据执行计划调用存储引擎来执行查询
6、将结果返回给客户端