1. 存储引擎支持情况
SHOW ENGINES
命令来查看当前
MySQL
支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。
在
MySQL
中,只有
InnoDB
是支持事务的。
2
基本概念
事务:
一组逻辑操作单元,使数据从一种状态变换到另一种状态。
事务处理的原则:
保证所有事务都作为
一个工作单元
来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(
commit
)
,那么这些修改就
永久
地保存下来;要么数据库管理系统将
放弃
所作的所有
修改
,整个事务回滚
(
rollback
)
到最初状态。
3
事务的
ACID
特性
原子性(
atomicity
):
原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚。
一致性(
consistency
):
一致性是指事务执行前后,数据从一个
合法性状态
变换到另外一个
合法性状态
。
隔离型(
isolation
):
事务的隔离性是指一个事务的执行
不能被其他事务干扰
,即一个事务内部的操作及使用的数据对
并发
的 其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(
durability
):
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是
永久性的
,接下来的其他操作和数据库故障不应该对其有任何影响。
4
如何使用事务
使用事务有两种方式,分别为
显式事务
和
隐式事务
。
4.1
显式事务
START TRANSACTION
或者
BEGIN
,作用是显式开启一个事务。
4.2
隐式事务
数据定义语言(
Data definition language
,缩写为:
DDL
)
隐式使用或修改
mysql
数据库中的表
事务控制或关于锁定的语句
加载数据的语句
关于
MySQL
复制的一些语句
其它的一些语句
5.事务日志
5.1 REDO日志
1.
好处
redo
日志降低了刷盘频率
redo
日志占用的空间非常小
2.
特点
redo
日志是顺序写入磁盘的
事务执行过程中,
redo log
不断记录
![](https://img-blog.csdnimg.cn/b07b3a787af84696bc3418f533c28d2b.png)
5.2 Undo日志
redo log
是事务持久性的保证,
undo log
是事务原子性的保证。在事务中
更新数据
的
前置操作
其实是要先写入一个
undo log
。
事务需要保证
原子性
,也就是事务中的操作要么全部完成,要么什么也不做。但有时候事务执行到一半 会出现一些情况,比如:
情况一:事务执行过程中可能遇到各种错误,比如
服务器本身的错误
,
操作系统错误
,甚至是突
然
断电
导致的错误。
情况二:程序员可以在事务执行过程中手动输入
ROLLBACK
语句结束当前事务的执行。
以上情况出现,我们需要把数据改回原先的样子,这个过程称之为
回滚
,这样就可以造成一个假象:这 个事务看起来什么都没做,所以符合
原子性
要求。