MySQL(Mariadb)总结6 - 事务 - Go语言中文社区

MySQL(Mariadb)总结6 - 事务


事务: 一种原子性的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
版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/257c8a7e62f9
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-08 08:22:27
  • 阅读 ( 1074 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢