最近被问到各种事务,这里做一个总结:
Mysql 事务:
innoDB引擎才支持事务
显式设置事务
前提:必须先设置自动提交功能为禁用
每一条语句本身就是一个事务
set autocommit=0 //取消自动提交
show variables like'autocommit'; //查看自动提交是否关闭
步骤:
set autocommit=0
start transaction;
commit;
rollback;
# 事务未提交之前,相当于数据在内存中,加了事务结束标记以后,才更新到文件中
mysql 四种数据库事务的隔离级别
1. repeatable read(可解决脏读,不可重复读) 默认
2. read uncommitted(全都出现了)
3. read committed(可避免脏读)
4. serializable(全都可以避免)(插入有阻塞操作)
不同的隔离级别造成的结果
- 脏读
- 不可重复读
- 幻读
结果 | Explain |
---|---|
脏读 | 一个事务开启并更新了数据,第二个事务开启并读取了数据 。第二个事务读取了第一个事务更新的数据,但第一个事务现在回滚了。于是第二个事务再次读取,得到不一样的值,第二个事 |