事务: 一种原子性的SQL查询,或者说是一个独立的工作单元.
事务日志文件:
ACID测试:
- A: atomicity, 原子性 - 整个事务钟的所有操作要么全部执行,要么全部失败后回滚.
- C:consistency, 一致性 - 数据库总是从一个一致性状态转化为另一个一致状态;
- I: Isolation, 隔离性 - 一个事务所做出的操作在提交之前,是不能为其它所见,隔离有多种隔离级别;
- D: durability: 持久性 - 一旦事务提交,其所做的修改会永远保存于数据库中.
使用事务:
- 启动事务: START TRANSACTION
- 结束事务:
- COMMIT:提交
- ROLLBACK:回滚
建议: 显示请求和提交事务,而不要自动提交.
autocommit=[0/1]
help transaction
设置保存点savepoint
SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
事务隔离级别:
- READ UNCOMMITTED(读未提交)
- READ COMMITTED (读提交)
- REPEATABLE READ (可重读)
- SERIALIZABILE(可串行化)
- tx_isolation,默认为REPETABLE-READ
可能存在问题:
- 脏读
- 不可重复读
- 幻读
- 加锁读
MVCC: 多版本并发访问控制,在事务启动时为每个事务创建快照.
死锁: 两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源的状态.
事务日志:
- 事务日志的写入类型为"追加",因此其操作为"顺序IO";
- 此日志通常也被称作"预写式日志(write ahead logging)";
默认事务日志:ib_logfile<n>
innodb_log_size
innodb_log_in_group
innodb_log_group_home_dir