事务的简单介绍
事务的定义
数据库事务是指对数据库的一系列操作要么全部成功,要么全部失败,是一个不可分割的工作单位。简单来说就是我们把对数据库的多次操作步骤绑定在同一个事务类,使这些多次操作绑定成一个整体。
事务的四大特性
原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。
一致性:在事务处理执行前后,数据库是一致的。
隔离性:一个事务处理对另外一个事务处理没有影响。
持续性:事务处理的效果能被永久的保存下来。
事务中并发情况下引起的问题
- 脏读:B事务读到了A事务为提交的数据(破坏了隔离性)
- 幻读:A事务在本次事务中,对未操作的数据进行多次读取数据出现了数据不一致或数据不存在的的情况(破坏了一致性 update/delete操作)
- 不可重复读:A事务在本次事务中,对未操作的数据第一次读取的时候记录不存在,第二次读取的时候记录存在(破坏了一致性 insert操作)
ISO定义的四种隔离级别
未提交读:最低一级别,只能保持持续性
已提交读:语句级别
可重复读:事务级别
串行化:最高级别,性能极低
事务隔离级别 | 脏读 | 幻读 | 不可重复读 |
---|---|---|---|
读未提交(read-uncommitted) | ✔ | ✔ | ✔ |
不可重复读(read-committed) | ✔ | ✔ | |
可重复读(repeatable-read) | ✔ | ||
串行化(serializable) |
事务的语法
开始事务:start transaction
事务回滚:ROLLBACK
事务确认:COMMIT
用set来改变MySQL的自动提交模型
SET AUTOCOMMIT = 0 禁止自动提交
SET AUTOCOMMIT = 1 开启自动提交
面试指导
关于mysql常用面试回答:
1、什么是事务(除了说出事务的定义之外最好结合示例:如银行账户的转账操作)
2、事务的四大特性(四个)
3、哪里用到过事务(比如:修改密码的时候,需要输入原密码,密码正确才能更新,否则的话就不能更新)
4、事务如何使用(事务的语法)