事务的概念
- 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。
- 事务是一个不可分割的工作巡逻单元,在数据库系统上执行并发操作时,事务时最小的控制单元
- 适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券公司交易系统等等
- 通过事务的整体性以保证数据的一致性
事务的ACID特点
原子性(Atomicity) - 事务是一个完整的操作,事务的各元素是不可分的(原子的)
- 事务中的所有元素必须作为一个整体提交或回滚
- 如果事务中的任何元素失败,则整个事务将失败
一致性(Consistency) - 当事务完成时,数据必须处于一致状态:在事务开始之前,数据库中存储的数据处于一致状态;在正在进行的事务时,数据可能处于不一致的状态;当事务成功完成时,数据必须再次回到已知的一致状态
隔离性(Isolation) - 对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
- 修改数据的事务可以在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据
持久性(Durability - 事务持久性不管系统是否发生故障,事务处理的结果都是永久的
- 一旦事务被提交,事务的效果被永久地保留在数据库中
事务的操作
默认情况下MySQL的事务是自动提交的,当sql语句提交时事务便自动提交
手动对事务进行控制的方法: - 事务处理命令控制
- 使用set设置事务处理方式
事务处理命令控制事务 - begin:开始一个事务
- commit:提交一个事务
- rollback:回滚一个事务
使用set命令进行控制 - set autocommit=0:禁止自动提交————相当于begin
- set autocommit=1:开启自动提交
实操过程
1.首先创建数据库和表并插入内容
插入一条新的记录
操作完成后查看发现操作直接提交,说明此数据库默认开启了自动提交功能。
再使用事务的方式来操作:
“begin”开始事务
查看发现zhaoliu的内容以及被插入
在插入一个新内容并存档,存档点为b
在插入一条记录并查看
此时我们刚刚新加的所有内容都存在于表中。但是这些内容是真的存在于表中吗?我们开启另一个终端查看:
发现刚刚我们插入的数据并没有写入表中,而是存储在内存上,因为没有使用“commit”提交,所以不会长久性保存
接下来我们用“rollback”回滚回到刚才的存档点b
存档点b我们只添加数据到“tianqi”
如果“tianqi”也不想要,我们就可以在回滚到存档点a
此时不可以再回滚到savepoint b
由此我们可以看出事务的回滚机制
如果直接“rollback”回到最原始状态,那么此事务也就结束了,想要再次开始事务就需要重新输入“begin”开始。
直接提交后在另一个终端上查看结果。
此时“tianqi”的数据已经提交并保存到表中,如果再使用“rollback”已经毫无意义
关闭自动提交
将id=2的地址改为“北京”
在另一个终端查看后发现并没有进行更改,
说明此时已经不会再自动提交了!
总结
我们要熟练的掌握事务的四大特性,通过简单的实验我们也能看出其中的特性。