网易MySQL微专业学习笔记(九)-数据库事务
前言
这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。 所有笔记可能不定期更新,发布时不一定为最终版。
正文
什么是事务
一系列有序的数据库操作
要么全部成功
要么全部会退到操作前状态
中间状态对其他连接不可见
事务的基本操作
start transaction;开始事务
commit;提交(全部完成)
rollback;回滚(回到初始状态)
begin;也是开始事务,但不是mysql标准开启事务的操作,ST是。
自动提交
autocommit可以在Session级别设置
每个DML操作都自动提交
DDL永远是自动提交,无法通过rollback回滚。
事物的四个基本属性(ACID)
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
原子性:
包含在事务中的操作要么全部执行,要么都不执行
中途数据库或应用发生异常,未提交的事务都应该被回滚。
事务的一致性
数据的正确性,合理性,完整性
数据一致性应该符合应用需要的规则
余额不能是负数?
交易对象必须先有账号?
用户账号不能重复?
事务的结果需要满足数据的一致性约束
事务的持久性
提交完成的事务对数据库的影响必须是永久性的
数据库异常不会丢失事务更新
通常认为成功写入磁盘的数据即为持久化成功
事务的持久化的实现
数据文件持久化
事务日志持久化与实例恢复
事务的隔离性
数据可事务在提交完成前,中间的任何数据变化对其他事物都是不可见的
数据库隔离现象
脏读
不可重复读
幻读
Mysql的事务隔离级别
InnoDB默认标记为可重复读(Repeatable read)
InnoDB并不是标准定义上的可重复读
InnoDB默认在可重复读的基础上避免幻读
Mysql事务隔离级别设置
tx_isolation REPEATABLE-READ
可在global/Session/下个事务,级别分别进行设置
建议使用read committed(同Oracle)
或者建议使用默认的Repeatable read
事务与并发写
某个正在更新的记录在提交或回滚前不能被其他事务同时更新。
除特别注明外,本站所有文章均为 Windcoder网 原创,转载请注明出处来自: wangyimysqlweizhuanyexuexibijijiu-shujukushiwu

暂无数据