事务定义
是一组有逻辑有顺序的操作集合,要么同时成功,要么同时失败
事务必须具备以下四个特性(ACID特性)
1.原子性(Atomicity)
2.一致性(Consistency):前提要其他三特性都满足,自己和自己比
3.隔离性(Isolation)
4.持久性(Durability)
并发事务问题
脏读:一个事务读到另一个事务还没有提交的数据
不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现的幻影
事务隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
read uncommitted(性能高,安全性差) | ✔️ | ✔️ | ✔️ |
read committed(oracle默认) | ❌ | ✔️ | ✔️ |
repeatable read(mysql默认) | ❌ | ❌ | ✔️ |
serializable(性能差,安全性高) | ❌ | ❌ | ❌ |
查看事务隔离级别
select @@transaction_isolation
设置事务隔离级别
set 【session | global】transaction isolation level [............]
改变自动提交模式
MySQL中默认是自动提交
SET AUTOCOMMIT = 0; #关闭自动提交模式
SET AUTOCOMMIT = 1; #开启自动提交模式
事务实现方法
START TRANSACTION或者begin 开始一个事务,标记事务的起始点
COMMIT 提交一个事务给数据库
ROLLBACK 将事务回滚,数据回到本次事务的初始状态
SET AUTOCOMMIT = 1; 开启MySQL数据库的自动提交