一、事务:一组原子性的SQL查询,或者说一个独立的工作单元
ACID测试:
A:atomicity,原子性,整个事务中的所有操作要么全部成功执行,要么全部失败后回滚;
C:comsistency,一致性:数据库总是从一个一致性状态转换为另一个一致性状态;
I:Isolation,隔离性:一个事务所做出的操作在提交之前,是不能为其它所见;
D:durability:持久性:一旦事务提交,其所做的修改会永久保存于数据库中;
二、启动事务:
START TRANSACTION
三、结束事务:
(1)COMMIT:提交
(2)ROLLBACK:回滚
注意:只有事务型存储引擎才能支持此类操作;
建议:显式请求和提交事务,而不要使用"自动提交"功能;
四、事务支持savepoint
Syntax:
SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
五、事务的隔离级别:
READ UNCOMMITTED(读未提交)
READ COMMITTED(读提交)
REPEATABLE READ(可重读)
SERIALIZABLE(可串行化)
可能存在问题:
脏读;
不可重复读;
幻读;
加锁读;
tx_isolation:服务器变量,默认为REPEATABLE-READ,可在SESSION级进行修改;
SET tx_ioslation=''
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE
MVCC:多版本并发控制
六、死锁:
两个或多个事务在同一组资源上相互占用,并请求对方占用的资源的状态;
七、事务日志:
事务日志的写入类型为"追加",因此其操作为"顺序IO";此日志通常也被称为"预写式日志(write ahead logging)";
以下参数不支持运行时修改,需要写入配置配件重启MySQL服务才可生效:
innodb_data_home_dir = /data/mysql3401/data # 事务日志存储位置
innodb_log_file_size = 512M # 事务日志大小
innodb_log_files_in_group = 3 # 事务日志个数