1 MySQL事务
1.1 MySQL事务操作
MySQL事务控制语句:
- 开启事务:
START TRANSACTION或者begin - 提交事务:
COMMIT - 回滚事务:
ROLLBACK -
SET AUTOCOMMIT=0关闭自动提交 |1开启自动提交
MySQL事务隔离级别
查看事务隔离级别:
SHOW VARIABLES LIKE 'tx_isolation';
修改隔离级别:
- 设置未提交读
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; - 提交读
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; - 可重复读
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ; - 可串行化
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
附录:MySQL默认事务隔离级别是REPEATABLE_READ(读已提交)
1.2 MySQL事务保证原子性
1.2.1 原子性介绍和保证
MySQL 作为一个关系型数据库,以最常见的 InnoDB引擎来说,是如何保证 ACID 的:
- 原子性(
Atomicity) : 事务是最小的执行单位,不允许分割。原子性确保动作要么全部完成,要么完全不起作用;
如何保证:
通过undo log,undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子 - 一致性(
Consistency): 执行事务前后,数据保持一致;
如何保证:
数据备份、主备、主主、主从都离不开Bin log,需要依靠Bin log来同步数据,保证数据一致性 - 隔离性(
Isolation): 并发访问数据库时,一个事务不被其他事务所干扰
如何保证:
通过给操作的对象加悲观锁或者乐观锁,MVCC(undo log)来保证,RC不满足隔离性,RR满足隔离性 - 持久性(
Durability): 一个事务被提交之后。对数据库中数据的改变是持久的,即使数据库发生故障。
如何保证:
是通过redo来保证的。
1.2.2 隔离性讲解
MVCC(Multi Version Concurrency Control)即多版本并发控制,一个行记录数据有多个版本对快照数据,这些快照数据在undo log中。
如果一个事务读取的行正在做DELELE或者UPDATE操作,读取操作不会等行上的锁释放,而是读取该行的快照版本。













网友评论