1.事务
简介:事务是用户定义的一个数据库操作系列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。
事务的四个特性:①原子性 ②一致性 ③隔离性 ④持久性
事务通过begin开启,即为事务的起始点,包含提交事务:commit,回滚事务:rollback,等。
开启事务后,begin下的操作先存在事务日志(内存)中,不直接写入数据库(写入硬盘)
(首先需将数据库的自动提交改为不自动提交用以下命令行)。
select @@autocommit; --查看是否自动提交
set autocommit = 0; --修改为不自动提交
2.事务的提交和回滚
事务的提交(commit)和回滚(rollback)标志着事务的结束,提交是将内存的操作写入硬盘中,回滚为撤销begin下的操作,回到最开始的状态。
3.事务的隔离级别
- 读未提交(read uncommitted)隔离级别最低
修改该方法代码:
set session transaction isolation level read uncommitted;
- 读提交 (read committed)隔离级别较低
修改该方法代码:
set session transaction isolation level read committed;
- 可重复读(repeatable read)隔离级别中等(MYSQL默认)
修改该方法代码:
set session transaction isolation level repeatable read;
- 串行化(serializable)隔离级别最高
较安全,但效率低,事务A期间,表会被锁起,事务B不能操作。
修改该方法代码:
set session transaction isolation level serializable;
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read uncommitted) | 是 | 是 | 是 |
读提交 (read committed) | 否 | 是 | 是 |
可重复读(repeatable read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
脏读:事务A修改某个值(未提及或回滚),事务B读取到该值,后因某种原因事务A撤销对该值的修改,导致事务B读取到的值是无效的,一般脏读针对于update操作。
不可重复读:事务A在没有提交事务(会改变事务B所要读取的值)期间,事务B所读取到的数据是不同的。
幻读:开启事务A、事务B后,若事务A修改某个值并已经提交,事务B在事务期间只能读取到修改之前的值。