1.事务
- 事务四大特性:
- 原子性:要么所有操作都做,要么所有操作都不做。
- 一致性:数据要满足业务规则约束。
- 隔离性:(也称并发控制,可串行化,锁)2个事务相互隔离,在事务提交之前对其他事务不可见。
- 持久性:事务提交之后对数据的修改就是永久的。
2.开启事务
- begin 或者 start transaction 或者 set autocommit = 0
3.提交事务
- commit
- 隐式提交 DDL操作或者 在输入一个begin或者start transaction 开启下一个事务
4.回滚事务
- rollback 隐式回滚 退出会话,连接超时,关机,出现故障。
5.事务隔离级别
- MySQL InnoDB存储引擎有标准的四种隔离级别。
- 未提交读 read uncommitted(RU): 即脏读,一个事务中读到了起其他事务修改过未提交的数据。
- 读已提交 read committed (RC): 是Oracle默认事务隔离级别。
- 也叫不可重读:读取到了其他事务对旧数据的修改。
- 幻读:读到了其他事务新增的数据,仿佛出现了幻影。
- 可重复读 repetable read(RR): 在一个事务中可以反复读取到事务开始时的数据不会发生变化。MySQL默认事务隔离级别。
- 串行 serializable : 在每个读取的数据行上都加 表级共享锁,在每次写数据时都加 表级排它锁。造成InnoDB并发能力下降。
6.事务的实现
- 事务隔离性由锁来实现(查看博客)
- 原子性,持久性通过redo log来实现
- 一致性由undo log来实现。
7.事务类型
- 扁平事务:也就是最常见的事务
- 带有保存点的扁平事务:允许回滚到事务中的某一个点,扁平事务隐式的设置了一个保存点就是事务开始时刻。
-
设置保存点: SAVE WORK : 1
回滚到保存点: ROLLBACK WORK : 1
完全回滚事务: ROLLBACK WORK
-
- 链事务
- 嵌套事务
- 分布式事务
8.长事务
知识点:
- truncate 是DDL语句操作,delete 是DML 语句操作,他们的共同特点就是清空表内数据。但是truncate在事务中不能回滚,delete可以回滚。这是因为truncate是删除表出现建表,而delete只是删除数据,一次 truncate 之后自增id从1开始,而delete不从1开始。