MySQL事务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL事务相关的知识,希望对你有一定的参考价值。
mysql事务:
事务:一组原子性的SQL查询,或者说一个独立工作单元。
事务日志:
ACID测试:
A:atomicity,原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚;
C:consistency, 一致性;数据库总是从一个一致性状态转换为另一个一致性状态;
I:Isolation,隔离性;一个事务所做出的操作在提交之前,是不能为其它所见;隔离有多种隔离级别;
D:durability: 持久性;一旦事务提交,其所做的修改会永久保存于数据库中;
事务:
启动事务:START TRANSACTION
...
...
结束事务:
(1) COMMIT:提交
(2) ROLLBACK: 回滚
注意:只有事务型存储引擎方能支持此类操作;
建议:显式请求和提交事务,而不要使用“自动提交”功能;
autocommit={1|0}
事务支持savepoint
SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier
事务隔离级别:
READ UNCOMMITTED (读未提交)
READ COMMITTED (读提交)
REPEATABLE READ (可重读)
SERIALIZABILE (可串行化)
隔离级别过低,可能存在问题:
脏读;
不可重复读;
幻读;
加锁读;
mysql> SHOW GLOBAL VARIABLES LIKE ‘%isola%‘; #查看隔离级别
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
MariaDB [(none)]> SHOW VARIABLES LIKE ‘tx%‘;
tx_isolation:服务器变量,默认为REPEATABLE-READ;可在SESSION级进行修改;
mysql> SET tx_isolation=‘‘; #修改隔离级别命令
mysql> SET tx_isolation=‘READ-UNCOMMITTED‘;
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE
MVCC: 多版本并发控制
自动创建一个当前事务集的快照
死锁:
两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源的状态;
事务日志:
事务日志的写入类型为“追加”,因此其操作为“顺序IO”;此日志通常也被称为“预写式日志(write ahead logging)”;
日志文件大小相同,
mysql> SHOW GLOBAL VARIABLES LIKE ‘innodb%‘; (不支持运行修改,需要配置文件中修改,并重启mysql服务)
innodb_log_buffer_size #日志缓冲大小
innodb_log_file_size #日志文件大小 (事务日志不要过大)
innodb_log_files_in_group #同一日志组中的文件数量
innodb_log_group_home_dir #日志文件存放路径
不建议使用混合引擎。
以上是关于MySQL事务的主要内容,如果未能解决你的问题,请参考以下文章