MySql事务机制学习笔记(一)

MySql事务机制学习笔记(一)

事务机制(一)

避免写入直接操作数据文件

◆ 如果数据的写入直接操作数据文件是非常危险的事情

利用日志来实现间接写入

◆ MySQL总共有5种日志,其中只有redo日志和undo日志与事务有关

事务机制(Transaction)

◆ RDBMS = SQL语句 + 事务(ACID)

◆ 事务是一个或者多个SQL语句组成的整体,要么全部执行成功,要么全部执行失败。

管理事务

◆ 默认情况下 MySQL执行每条SQL语句都会自动开启和提交事务

◆ 为了让多条SQL语句纳入到一个事务之下,可以手动管理事务

1
2
3
4
5
START TRANSACTION;
SQL语句
[COMMIT|ROLLBACK];
# COMMIT 提交
# ROLLBACK 回滚

事务的ACID属性

原子性

◆ 一个事务中的所有操作要么全部完成,要么全部失败。事务执行后,不允许停留在中间的某个状态

一致性

◆ 不管在任何给定的时间、并发事务有多少,事务必须保证运行结果的一致性

隔离性

◆ 隔离性要求事务不受其他并发事务的影响,如同在给定的时间内,该事务时数据可唯一运行的事务

持久性

◆ 事务一旦提交,结果便是永久性的。即便发生宕机,仍然可以依靠事务日志完成数据的持久化

事务机制(二)

事务的四个隔离级别

序号 隔离级别 功能
1 read uncommitted 读取未提交数据
2 read committed 读取已提交数据
3 repeatable read 重复读取
4 serializable 序列化

READ UNCOMMITTED

◆ READ UNCOMMITTED 代表可以读取其他事务未提交的数据

1
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

READ COMMITTED

◆ READ COMMITTED 代表只能读取其他事务提交的数据

1
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

REPEATABLE READ

◆ REPEATABLE READ 代表事务在执行中反复读取数据,得到的结果是一致的,不会受其他事务影响。

1
SET SESSION TRANSACTION ISOLATION  LEVEL REPEATABLE READ;

◆ 这是MySQL默认的隔离级别

SERIALIZABLE

◆ 由于事务并发执行所带来的各种问题,前三种隔离级别只使用在某些业务场景中,但是序列化的隔离性,让事务逐一执行,就不会产生上述问题了。

1
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×